spring的三種注入方式

jopen 8年前發布 | 9K 次閱讀 Spring JEE框架

spring的三種注入方式:

1、屬性注入

2、構造方法注入

3、工廠方法注入

屬性注入:

屬性注入需要注意的是在bean的配置時屬性名稱是setter方法的名字而不是字段名稱,如:

<bean id="car" class="com.za.Car">
    <property name="IDCard"><value>123</value></property>
</bean>

而Java類:

Class Car{
    private Integer iDCard;
    public void setIDCard(Integer iDCard){
        this.iDCard=iDCard;
    }
}

如果property屬性中name寫成了iDCard 當啟動spring時就會報錯

構造方法注入:

當一個類中只有一個有參構造并且入參類型不一致時:

Class Car{
    private String name;
    private Double price;
    public Class(String name,Double price){
        this.name = name;
        this.price = price;
    }
    //setter、getter...
}

bean的xml配置:

<bean id="car" class="com.za.Car">
   <constructor-arg type="java.lang.String" value="hongqi"/>
    <constructor-arg type="java.lang.Double" value="555555">
</bean>

當只有一個入參并且入參類型有重復時:

Class Car{
    private String name;
    private String CarNo;
    private Double price
    public Class(String name,String CarNo,Double price){
        this.name = name;
        this.CarNo= CarNo;
        this.price=price;
    }
    //setter、getter...
}

此時bean的xml配置使用type就不可以了,要使用index來區分:

<bean id="car" class="com.za.Car">
   <constructor-arg index="0" value="hongqi"/>
    <constructor-arg index="1" value="蘇A00000">
    <constructor-arg index="2" value="555555">
</bean>

當構造方法有重載并且入參類型重復時,這時使用type和index來結合使用加以區分(例子省略)

構造方法注入可能會出現的一種情況是:循環依賴問題,比如在Car的構造方法中依賴了Wheel類,而Wheel類的構造方法中也依賴了Car類,此時啟動spring容器就會有問題。解決方法:修改bean代碼把構造方法注入修改為屬性注入就可以了。

工廠方法注入:

非靜態工廠方法:

public CarFactory{
    public Car creatCar(){
        Car car = new Car();
        car.setName("紅旗");
        return car;
    }
}

bean配置:

<bean id="car" class="com.za.Car" factory-bean="carFactory" factory-method="creatCar"></bean>
<bean id="carFactory class="com.za.CarFactory/>

因為是非靜態的,所以要有一個工廠bean,在工廠注入時引用

靜態工廠方法:

public CarFactory{
    public static Car creatCar(){
        Car car = new Car();
        car.setName("紅旗");
        return car;
    }
}

bean配置:

<bean id="car" class="com.za.CarFactory" factory-method="creatCar"/>

省去了工廠bean的配置

已有 0 人發表留言,猛擊->> 這里 <<-參與討論

ITeye推薦

來自: http://itindex.net/detail/55008-spring

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!