beanFactory和 factoryBean
beanFactory 是 IoC容器 ,根据描述生成bean,获取bean , 在 DI 时 解析依赖关系
factoryBean 是IoC 容器 管理的 bean。if a bean implements this interface, it is used as a factory for an object to expose, not directly as a bean instance that will be exposed itself.
我们利用工厂方法模型生成对象。例如:
public class Animal {
private String name;
private String color;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public StringgetColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "animal's name " + getName() + " color " + getColor();
}
}
静态工厂对象:
public class StaticFactoryBean {
public static Animal getAnimal (){
Animal animal = new Animal();
animal.setName("dog");
animal.setColor("red");
return animal ;
}
}
被调用时,只需 StaticFactoryBean. getAnimal ();
实例工厂对象
public class MyFactoryBean {
public void init (){
System.out.println(" doing something");
}
public Animal getAnimal (){
Animal animal = new Animal();
animal.setName("dog");
animal.setColor("red");
return animal ;
}
public void destory(){
System.out.println(" doing something");
}
}
被调用时,先生成 factoryBean 实例,然后在返回obj之前,做一些init 的工作,然后返回obj。
这两种方式在spring框架中的配置
<!--静态工厂-->
<bean class="org.allen.springbeans.bean.StaticFactoryBean" factory-method="getAnimal " name="staticFactoryBean"/>
<!--实例工厂-->
<bean class="org.allen.springbeans.bean.MyFactoryBean" init-method="init" destroy-method="destory" name="myFactoryBean" />
<!--这个bean 就是factoryBean 生成的对象-->
<bean id="animal" factory-bean="myFactoryBean" factory-method="getAnimal" />