1. 程式人生 > >【Spring】設值注入和構造注入

【Spring】設值注入和構造注入

設值注入

概念: 指 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的實現和依賴,通過容器中的反射來產生並初始化元件,同時各元件面向介面程式設計,這樣元件間的耦合關係為介面層次

設定注入更容易理解,多數採用這種方式;構造注入可以決定依賴關係的注入順序,但是可能會導致構造器笨重

對於依賴關係無須變化的注入,採用構造注入;而其他依賴關係的注入,採用設值注入。