在spring中炸茧,如果類是由我們自己設(shè)計(jì)并開(kāi)發(fā)的阔馋,那么可以通過(guò)依賴注入每强,讓容器幫助我們解除接
口與實(shí)現(xiàn)類之間的耦合性。但是空执,如果在開(kāi)發(fā)中我們需要使用第三方類庫(kù)浪箭,并實(shí)例化中其中的相關(guān)類,我們就需要使用其他的方式避免接口與實(shí)現(xiàn)類的耦合性辨绊。
工廠Bean與工廠方法
一般情況下,應(yīng)用程序有自己的工廠對(duì)象來(lái)創(chuàng)建bean.如果將應(yīng)用程序自己的工廠對(duì)象交給Spring管理,那么Spring管理的就不是普通的bean,而是工廠Bean奶栖。
假設(shè)某個(gè)第三方庫(kù)發(fā)布了 Ieat ,為了向使用該接口的客戶端對(duì)象屏蔽以后可能對(duì)Ieat 實(shí)現(xiàn)類的變動(dòng)门坷,同時(shí)還提供了一個(gè)工廠方法實(shí)現(xiàn)類 EatFactory ⌒桑現(xiàn)在我們想在自己的應(yīng)用中使用它, 代碼如下:
public class EatFactory {
public Ieat getInstance() {
return new EatOrange();
}
}
這是我們的應(yīng)用
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與靜態(tài)工廠方法
假如工廠類為我們提供了靜態(tài)的工廠方法默蚌,那我們的配置文件就要稍加修改
靜態(tài)的工廠方法
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" />
有一些工廠方法帶有一些參數(shù)冻晤,現(xiàn)在假設(shè)我們實(shí)例化Ieat需要一個(gè)參數(shù)name,這時(shí)我們可以采用如下方法進(jìn)行配置
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>