Spring 提供配置Bean 三种实例化方式
1. 使用类构造器实例化(默认无参数)
则在配置文件中配置:
<bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"></bean>
此时spring容器会调用Bean1的无参构造器实例化Bean1.
这种方式也是开发中最常用的.
========================================
2. 使用静态工厂方法实例化(简单工厂模式)
/** * 静态工厂方法进行实例化 */ publicclass Bean2 { } |
/** * Bean2 工厂类 */ publicclass Bean2Factory { publicstatic Bean2 getBean2() { System.out.println("静态工厂方法执行..."); returnnew Bean2(); } } |
此时在spring配置文件中配置Bean2的方式如下:
<bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory" </bean> |
其中:此时的class属性值是静态工厂方法类的完全限定名.
factory-method="getBean2"是静态工厂方法的方法名.
========================================
3. 使用实例工厂方法实例化(工厂方法模式)
/** * 实例工厂方法 */ publicclass Bean3 { } |
/** * Bean3的工厂 */ publicclass Bean3Factory { public Bean3Factory() { System.out.println("创建Bean3工厂对象..."); } // 先创建 Bean3Factory实例,再调用 getBean3 public Bean3 getBean3() { System.out.println("实例工厂方法...."); returnnew Bean3(); } }
|
此时在spring配置文件中配置Bean3的方式如下:
<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"></bean> //这种方式要配置两个bean <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean> |
这种方式比较麻烦点:必须先创建工厂类Bean3Factory然后再去调用Bean3Factory类的工厂方法.因为Bean3Factory没有静态工厂方法,调用实例方法必须new对象出来.
对于第二种创建配置的方式因为静态工厂方法可以不需要创建对象就可以调用,所以不需要创建Bean的工厂类.
实例工厂类必须提供无参构造器,因为spring要实例化实例工厂类.
在配置bean3时 factory-bean属性值引用spring配置文件中实例工厂类的id或name值;
factory-method="getBean3"调用工厂类的实例工厂方法.