通過構造方法注入,就相當於給構造方法的參數傳值
set注入的缺點是無法清晰表達哪些屬性是必須的,哪些是可選
的,構造注入的優勢是通過構造強制依賴關系,不可能實例化不
完全的或無法使用的bean。
MemberBean定義四個變量,
private String name;
private Double salary;
private Dept dept;
private String sex;
加上構造方法和toString方法:方便測試
Dept:
private String dname;
private String deptno;
使用set方法注入
第一種方法:根據索引賦值,索引都是以0開頭的:
<bean
id="memberBean" class="www.csdn.spring01.constructor.MemberBean">
<constructor-arg index="0" value="劉曉剛" />
<constructor-arg index="1" value="3500" />
<constructor-arg index="2" ref="dept"/>
<constructor-arg index="3" value="男" />
第二種方法是根據所屬類型傳值
這種方法基本上不怎么適用,因為一個類里可以有好幾個相同基本類型的變量,很容易就混淆值傳給哪一個參數了所以做好不要使用這種方法:
<constructor-arg type="Java.lang.String" value="劉曉剛"
<constructor-arg type="java.lang.Double" value="3500" />
<constructor-arg type="www.csdn.spring01.constructor.Dept" ref="dept"/>
<constructor-arg type="java.lang.String" value="男" />
第三種方法:根據參數的名字傳值:(推薦用法)
在這幾種方法里我感覺這種方法是最實用的,他是根據名字來傳值的,所以基本上只要名字對了,這個值就可以獲取到
<constructor-arg name="name" value="劉曉剛" />
<constructor-arg name="salary" value="3500" />
<constructor-arg name="dept" ref="dept"/>
<constructor-arg name="sex" value="男" />
第四種方法:直接傳值
直接給參數賦值,這種方法也是根據順序排的,所以一旦調換位置的話,就會出現bug,這種方法已經很原始了
<constructor-arg value="劉曉剛" />
<constructor-arg value="3500" />
<constructor-arg ref="dept"/>
<constructor-arg value="男" />
</bean>
<bean id="dept" class="www.csdn.spring01.constructor.Dept" >
<property name="dname" value="北航"/>
<property name="deptno" value="00001"/>
</bean>S