學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 第四章、註入(Injection) 1.什麼是註入 通過Spring工廠及配置文件,為所創建對象的成員變數賦值 1.1為什麼需要註入 “通過編碼的方式,為 ...
學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】
第四章、註入(Injection)
1.什麼是註入
通過Spring工廠及配置文件,為所創建對象的成員變數賦值
1.1為什麼需要註入
“通過編碼的方式,為成員遍歷進行賦值,存在耦合”
1.2如何進行註入[開發步驟]
- 類為成員變數提供set方法
- 配置Spring的配置文件
<bean id="person" name="p,p1" class="com.baizhi.basic.Person">
<property name="id">
<value>10</value>
</property>
<property name="name">
<value>xiaojr</value>
</property>
</bean>
1.3註入好處
1.解耦合
2.Spring註入的原理分析(簡易版)
第五章、Set註入詳解
針對於不同類型的成員變數,在<property
>標簽,需要嵌套其他標簽
1.JDK內置類型
1.1 String+8種基本類型
<value>suns</value>
1.2 數組
<list>
<value>[email protected]</value>
<value>[email protected]</value>
<value>[email protected]</value>
</list>
1.3 Set集合
<set>
<value>1239188123</value>
<value>123813121</value>
<value>130111111</value>
<value>130111111</value>
</set>
<set>
<ref bean=""/> // 什麼都能存
<set></set>
</set>
1.4 List集合
<list>
<value>zpark</value>
<value>shangdi</value>
<value>xierq</value>
</list>
<list>
<ref bean=""/>
<set></set>
</list>
1.5 Map集合
註意: map -- entry -- key有特定的標簽 <key></key>
值根據對應類型選擇對應類型的標簽
<map>
<entry>
<key><value>suns</value></key>
<value>4231324113</value>
</entry>
<entry>
<key><value>chenvn</value></key>
<ref bean=""/>
</entry>
</map>
1.6 Properites
Properties類型 特殊的Map key=String value=String
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
</props>
1.7 複雜的JDK類型(Date)
需要程式員自定義類型轉換器,處理。
2.用戶自定義類型
2.1 第一種方式
-
為成員變數提供set get方法
-
配置文件中進行註入(賦值)
<bean id="userService" class="com.baizhi.basic.UserServiceImpl"> <property name="userDao" > <bean class="com.baizhi.basic.UserDaoImpl"></bean> </property> </bean>
2.2第二種方式
-
第一種賦值方式存在的問題
- 配置文件代碼冗餘
- 被註入的對象(UserDao)多次創建,浪費(JVM)內容資源
-
為成員變數提供set get方法
-
配置文件中進行配置
<!-- 第二種 賦值方式 先創建需要的dao對象--> <bean id="userDAO" class="com.baizhi.basic.UserDaoImpl"/> <bean id="userService" class="com.baizhi.basic.UserServiceImpl"> <property name="userDao"> <ref bean="userDAO"/> </property> </bean> #Spring4.x廢除了<ref local=""/>,基本等效 <ref bean=""/>
3.Set註入的簡化寫法
3.1基於屬性簡化
JDK類型簡化
<property name="name" value="suns"/>
註意:value屬性 只能簡化8種基本類型 + String註入標簽
用戶自定義類型
<property name="userDao" ref="userDao"/>
3.2 基於p命名空間簡化
<!-- p: 簡化寫法-->
<bean id="person" class="xxx.Person" p:name="suns" p:id="100"/>
用戶自定義類型
<bean id="userDAO" class="xxx.UserDaoImpl"/>
<bean id="userService" class="xxx.UserServiceImpl" p:userDao-ref="userDAO" />
第六章、構造註入
- 註入:通過Spring配置文件為成員變數賦值
- Set註入:Spring調用Set方法 通過配置文件為成員變數賦值
- 構造註入:Spring調用構造方法 通過配置文件為成員變數賦值
1.開發步驟
- 提供有參構造方法
- Spring配置文件
<bean id="customer" class="com.baizhi.basic.constructer.Customer">
<constructor-arg value="suns"/>
<constructor-arg value="102"/>
</bean>
2.構造方法重載
2.1 參數個數不同時
- 通過控制
標簽的數量進行區分
2.2構造參數個數相同時
- 通過在標簽隱入 type屬性 進行類型的區分
3. 註入的總結
-
未來的實戰中 ,應用set註入還是構造註入?
答案:set註入更多
- 構造註入麻煩(重載)
- Spring框架底層 大量應用了 set註入
作者:揚眉劍出鞘
出處: https://www.cnblogs.com/eyewink/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。