您的位置:首页 > 编程语言 > Java开发

spring学习之---创建Bean的三种方式

2017-07-21 21:15 405 查看

1.使用构造器创建Bean实例

如果不采用构造注入,spring底层会调用Bean类的无参构造器来创建实例,因此要求该Bean提供无参构造器,在这种情况下,class元素时必需的,class属性的值就是Bean实例的实现类,spring对Bean实例的所有属性执行默认初始化,即所有基本类型的值初始化为0或false;所有的引用类型的值初始化为null。

接下来,BeanFactory会根据配置文件决定依赖关系,先实例化被依赖的Bean实例,然后为Bean注入依赖关系,最后将一个完整的Bean实例返回给程序。

如果采用构造注入,spring容器将使用带对应参数的构造器来创建Bean实例,spring调用构造器传入的参数即可用于初始化Bean的实例变量,最后也将一个完整的Bean实例返回给程序。

2.使用静态工厂方法创建Bean

使用静态工厂方法创建Bean实例时,class属性也必须指定,但此时class属性并不是Bean实例的实现类,而是静态工厂类,spring通过该属性知道由哪个工厂类来创建Bean实例。还需要使用factory-method属性来指定静态工厂方法。

如果静态工厂方法需要参数,则使用
<constructor-arg.../>
元素传入。

public class Dog{
private String msg;
setter方法
public void testBeing(){
System.out.println(msg + "狗爱吃肉");
}
}

public class Being Factory{
public static Being getBeing(){
return new Dog();
}
}

<bean id="dog" class="...BeingFactory" factory-method="getBeing">
<property name="msg" value="小狗狗"/>
</bean>


使用静态工厂方法创建实例时必须提供工厂类,工厂类包含产生实例的静态工厂方法。

3.调用实例工厂方法创建Bean

配置静态工厂方法使用class指定静态工厂类,而配置实例工厂方法则使用factory-bean指定工厂实例。

使用实例工厂方法时,配置Bean实例的
<bean.../>
元素无须class属性,因为spring容器不再直接实例化该Bean,spring容器仅仅调用实例工厂的工厂方法,工厂方法创建Bean实例。

public class American{
public String sayHello(String name){
return name + ",Hello";
}
}

public class PersonFactory{
public American getAmerican(){
return new American();
}
}

<bean id="personFactory" class="...PersonFactory"/>
<bean id="american" factory-bean="personFactory" factory-method="getAmerican">
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: