1. Spring创建Bean的三种方式
1. 调用构造器(因为常用就不讲)
2. 调用静态工厂方法
3. 调用实例工厂方法
2. 使用静态工厂方法
1.此时<bean.../>
元素要指定以下两个属性
class:用于指定静态工厂类的完整类名
factory-method:用于指定创建Bean的静态工厂方法
2.代码:
//接口
public interface Animal{
public void eat();
}
//Dog类
public class Dog implements Animal{
private String msg;
public void setMsg(String msg){
this.msg=msg;
}
public void eat(){
System.out.print(msg);
}
}
//静态工厂类代码
public class AnimalFactroy{
public static Animal getAnimal(String name){
if("dogs".equalsInnoreCase(name)){
return new Dog();
}else{
return new Cat();
}
}
}
3.用配置文件的形式创建Dog Bean的代码:
<bean id="dog" class="com.dfsj.AnimalFactroy" factory-method="getAnimal">
<!--配置静态工厂方法的参数-->
<constructor-arg value="dogs">
<!--给新建Dog的msg属性赋值-->
<property name="msg" value="我是狗">
</bean>
3. 使用实例工厂方法创建
此时<bean.../>
元素要指定以下两个属性
factory-bean:该属性值为工厂类在配置文件中的id
factory-method:用于指定创建Bean的静态工厂方法
4. 静态工厂方法与实例工厂方法创建Bean时的区别
不同点
- 静态工厂要用class属性指定静态工厂类的完整类名,而实例工厂用factory-bean指定非静态工厂类在配置文件中的id
- 静态工厂的factory-method指定的方法是静态方法,而实例工厂的不是
相同点
- 二者都需要factory-method属性指定生产Bean实例的方法
- 工厂方法需要的参数都要通过
<constructor-arg>
来指定 - 具体的Bean实例的属性值赋值,都是通过
<property.../>
元素