spring实例化bean的三种方式
程序员文章站
2022-05-23 15:54:17
...
概述
构造器实例化bean:最常用,通过调用bean的无参构造方法实例化bean。当然也可以使用有参构造函数实例化bean
静态工厂方法实例化bean:通过调用工厂类的静态方法实例化bean
实例化工厂方法实例化bean:与静态工厂的区别是实例化bean的方法非静态,需要先将工厂类实例化,再调用非静态的实例化方法示例bean
构造器实例化bean
<!-- 默认的无参构造函数,不需要配置其它属性 -->
<bean id="baseDao" class="cn.mytest.service.impl.PersonDAO"></bean>
<!-- 有参构造函数 -->
<bean id="personService" class="cn.mytest.service.impl.PersonServiceBean">
<constructor-arg ref="baseDao"/>
</bean>
静态工厂方法实例化bean
顾名思义这种方式就像一个工厂可以自己生成bean。首先我们创建一个工厂类:
public class PersonServiceFactory {
//创建静态工厂方法
public static PersonServiceBean createPersonServiceBean(){
//返回实例化的对象
return new PersonServiceBean();
}
}
接下来就是配置xml:
<bean id="personService1" class="cn.mytest.service.impl.PersonServiceFactory"
factory-method="createPersonServiceBean"></bean>
id是实例化的对象的名称,class是工厂类,也就实现实例化类的静态方法所属的类,factory-method是实现实例化类的静态方法。
实例化工厂方法实例化bean
与静态工厂方法实例化bean不同的是,工厂类中实例化bean的方法不是静态的。还是先创建工厂类:
public class PersonServiceFactory {
//创建bean的工厂方法
public PersonServiceBean createPersonService(){
//返回实例化的对象
return new PersonServiceBean();
}
}
此时的配置文件相比上面的要复杂一点:
<!-- 首先需要实例化工厂 -->
<bean id="personServiceFactory" class="cn.mytest.service.impl.PersonServiceFactory"></bean>
<!-- 再实例化需要的bean -->
<bean id="personService" factory-bean="personServiceFactory" factory-method="createPersonService"></bean>
推荐阅读