對於如下配置片段:
-
<bean id="id" class="lee.Aclass">
-
<!--property配置需要依賴注入的屬性-->
-
<property name="aaa" value="aVal"/>
-
<property name="bbb" value="bVal"/>
-
...
-
</bean>
Spring將會為每個bean元素創建一個Java對象(即bean實例)。而Spring將采用類似於如下的代碼創建Java實例。
-
//獲取lee.AClass類的Class對象
-
Class targetClass = Class.forName( "lee.AClass");
-
//創建Lee.AClass類的默認實例
-
Object bean = targetClass.newInstance();
創建實例后,Spring接着遍歷bean元素中所有的property子元素,bean元素沒包含一個property子元素,spring將為該bean實例調用一次setter方法。
類似如下代碼:
-
//獲取aaa的屬性對應的setter方法名
-
String _setName1 = "set" +"Aaa";
-
/獲取lee.Class類中的setAaa()方法
-
Method setMethod1 = targetClass.getMethod(setName1,aVal.getClass());
-
//調用bean實例的setAaa()方法
-
setMethod1.invoke(bean,aVal);
通過上述代碼,Spring就可以根據配置文件的信息來創建Java實例。並將為該Java實例注入合理的屬性值。