【Spring】設值注入和構造注入
阿新 • • 發佈:2019-01-09
設值注入
概念: 指 IoC容器通過成員變數的setter方法來注入被依賴物件
介面
public interface User{
public addCard();
}
public interface Card{
public String getCardId();
}
介面的實現
public class Employee impements User{
private Card card;
public void setCard(Card card){
this.card = card;
}
public void addCard(){
System.out.println(card.getCardId);
}
}
public class BankCard impements Card{
public String getCardId(){
return "cardid";
}
}
public class ElectricityCard impements Card{
public String getCardId(){
return "cardid";
}
}
XML 配置檔案
<beans ....>
<bean id ="employee" class="com.service.impl.Employee">
<property name="card" ref="bankCard" />
</bean>
<bean id="bankCard" class="com.service.impl.BankCard" />
<bean id="electricityCard" class="com.service.impl.ElectrictyCard " />
</beans>
main方法
public static void main(String[] args) throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
Employee e = ac.getBean( "employee" , User.class );
}
構造注入
概念: 利用構造器,在構造例項時,為其完成依賴關係的初始化
介面同上
……..
部分實現
public class Employee impements User{
private Card card;
public Employee(Card card){
this.card = card;
}
public void addCard(){
System.out.println(card.getCardId);
}
}
XML 配置檔案
<beans ....>
<bean id="employee" class="com.service.impl.Employee">
<constructor-arg ref="electricityCard" />
</bean>
<bean id="bankCard" class="com.service.impl.BankCard" />
<bean id="electricityCard" class="com.service.impl.ElectrictyCard " />
</beans>
小結
在Spring中,採用配置檔案管理Bean的實現和依賴,通過容器中的反射來產生並初始化元件,同時各元件面向介面程式設計,這樣元件間的耦合關係為介面層次
設定注入更容易理解,多數採用這種方式;構造注入可以決定依賴關係的注入順序,但是可能會導致構造器笨重
對於依賴關係無須變化的注入,採用構造注入;而其他依賴關係的注入,採用設值注入。