JAVA_Spring Ioc 实例化 bean 对象的三种方式

版权声明:有一种生活不去经历不知其中艰辛,有一种艰辛不去体会,不会知道其中快乐,有一种快乐,没有拥有不知其中纯粹 https://blog.csdn.net/wwwzydcom/article/details/82853709

Spring  Ioc 实例化 bean 对象的三种方式 :

默认构造器创建

<bean id="userService" class="com.shsxt.service.UserService"></bean>
 //构造器实例化,默认调用其空构造
    @Test
        public void test01(){
            UserService userService = null;
            BeanFactory factory = new ClassPathXmlApplicationContext("spring01.xml");
            userService = (UserService) factory.getBean("userService");
            userService.test();
        }

通过默认构造器创建,空构造必须存在,否则创建失败

静态工厂

  package com.shsxt.factory; 
 
import com.shsxt.service.UserService; 
 
public class StaticFactory 
{  
public static UserService createUserService()
{   
return new UserService(); 
 } 

xml中bean的配置

<bean id="userService" class="com.shsxt.factory.StaticFactory"          factory-method="createUserService"/>

使用静态工厂的方式创建Bean

 //静态工厂实现实例化
        @Test
        public void test02(){
            UserDao userDao = null;
            BeanFactory factory = new ClassPathXmlApplicationContext("spring02.xml");
           userDao = (UserDao) factory.getBean("userDao");
            userDao.test();
    }

 实例化工厂实现

package com.factory;

import com.shsxt.dao.AccountDao;

public class InstanceFactory {
    public AccountDao getAccountDao(){
        return new AccountDao();
    }
}
  //实例化工厂实现实例化
    @Test
    public  void  test03(){
        BeanFactory factory = new ClassPathXmlApplicationContext("spring03.xml");
        AccountDao accountDao = (AccountDao) factory.getBean("accountDao");
        accountDao.test();
        //测试是不是单例模式
        System.out.println(factory.isSingleton("accountDao"));//true
    }
  <!-- 实例化工厂实现-->

<bean id="instanceFactory" class="com.factory.InstanceFactory" ></bean>
    <bean id="accountDao" factory-bean="instanceFactory" factory-method="getAccountDao"></bean>

三者之间的比较:

通过bean缺省构造函数创建:当各个bean的业务逻辑相互比较独立时,或者与外界关联较少时可以使用

静态factory方法创建:可以统一管理各个bean的创建,各个bean在创建之前需要相同的初始化处理,则可用这个factory方法进行统一的处理

实例化factory方法创建:1.将factory方法也作为业务bean控制,可以用于集成其他框架的bean创建管理方法,2.能够使bean和factory的角色互换

猜你喜欢

转载自blog.csdn.net/wwwzydcom/article/details/82853709