spring factoryBean

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" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值