美文网首页Spring开发程序员SpringFramework
Spring的factory-method和factory-be

Spring的factory-method和factory-be

作者: 我叫了了 | 来源:发表于2017-03-16 22:07 被阅读3952次

    在spring中,如果类是由我们自己设计并开发的,那么可以通过依赖注入,让容器帮助我们解除接
    口与实现类之间的耦合性。但是,如果在开发中我们需要使用第三方类库,并实例化中其中的相关类,我们就需要使用其他的方式避免接口与实现类的耦合性。

    工厂Bean与工厂方法

    一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean。

    假设某个第三方库发布了 Ieat ,为了向使用该接口的客户端对象屏蔽以后可能对Ieat 实现类的变动,同时还提供了一个工厂方法实现类 EatFactory 。现在我们想在自己的应用中使用它, 代码如下:

    public class EatFactory {
        public Ieat getInstance() {
            return new EatOrange();
        }
    }
    

    这是我们的应用

    
    public class Person {
        Ieat eat;
        
        public String eat(){
            return eat.eat();
        }
    
        public Ieat getEat() {
            return eat;
        }
    
        public void setEat(Ieat eat) {
            this.eat = eat;
        }
    }
    

    配置文件

    <bean id="person " class="it.spring.liao.com.Person">
        <property name="eat">
            <ref bean="eatOrange"/>
        </property>
    </bean>
    
    <bean id="eatFactory " class="it.spring.liao.com.EatFactory "/>
    
    <bean id="eat" factory-bean="eatFactory " factory-method="getInstance"/>
    
    工厂Bean与静态工厂方法

    假如工厂类为我们提供了静态的工厂方法,那我们的配置文件就要稍加修改

    静态的工厂方法

    public class EatFactory {
        public static Ieat getInstance() {
            return new EatOrange();
        }
    }
    

    配置文件

    <bean id="person " class="it.spring.liao.com.Person">
        <property name="eat">
            <ref bean="eatOrange"/>
        </property>
    </bean>
    
    <bean id="eatFactory " class="it.spring.liao.com.EatFactory" factory-method="getInstance" />
    
    

    有一些工厂方法带有一些参数,现在假设我们实例化Ieat需要一个参数name,这时我们可以采用如下方法进行配置

    public class EatFactory {
        public static Ieat getInstance(String name) {
            return new EatOrange(name);
        }
    }
    
    <bean id="eatFactory " class="it.spring.liao.com.EatFactory" factory-method="getInstance" >
        <constructor-arg>
              <value>This is name</value>   
        </constructor-arg>
    </bean>
    

    相关文章

      网友评论

        本文标题:Spring的factory-method和factory-be

        本文链接:https://www.haomeiwen.com/subject/ylajnttx.html