(Bean的实例化配置)Spring学习第四天

Bean的实例化配置

(Bean的实例化配置)Spring学习第四天_第1张图片

        1.构造方式实例化:用constructor标签定义构造方法的参数(很少用,不用管)

        业务层:UserServiceImpl代码,有参构造方法如下

public UserServiceImpl(String name) {
        System.out.println("UserServiceImpl有参构造方法执行");
    }

 在applicationContext.xml配置文件里增加constructor标签,name为构造方法形参,value为值


                
                
        

        2.工厂方式实例化:

(Bean的实例化配置)Spring学习第四天_第2张图片

         1.静态工厂方法实例化Bean:

创建静态工厂

public class MyBeanFactory1 {

    public static UserDao userDao(String name,int age){
        //Bean创建之前可以进行一些其他业务逻辑操作
        return new UserDaoImpl();
    }

}

在applicationContext.xml添加Bean工厂的标签

 

 之后在测试方法里getBean即可拿到对应对象

        2.实例工厂方法实例化Bean:与静态工厂的区别是:方法不是静态的,所以方法不能够直接调用,需要先创建MyBeanFactory对象,再去调用方法获得UserDaoImpl对象

创建工厂

public class MyBeanFactory2 {
    public  UserDao userDao(){
        //Bean创建之前可以进行一些其他业务逻辑操作
        return new UserDaoImpl();
    }
}

在applicationContext.xml添加Bean工厂的标签


        实现FactoryBean规范延迟实例化Bean:

创建工厂

public class MyBeanFactory3 implements FactoryBean {

    @Override
    public UserDao getObject() throws Exception {
        System.out.println("getObject被调用");
        return new UserDaoImpl();
    }

    @Override
    public Class getObjectType() {
        return UserDao.class;
    }


}

在applicationContext.xml添加Bean工厂的标签

为什么有延迟呢,我的个人理解是:

因为调用的自定义工厂实现了BeanFactory接口,而BeanFactory对于applicationContext来说是延迟实例化对象的,所以自定义的工厂也与BeanFactory一样具有 延迟实例化现象(指在加载完配置文件后为自动创建对象,在执行getBean时才创建Bean)

你可能感兴趣的:(spring,学习,java)