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