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