<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
思考:向一個類中傳遞資料的方式有幾種?
思考:依賴注入描述了在容器中建立bean與bean之間依賴關係的過程,如果bean執行需要的是數位或字串呢?
依賴注入方式:
setter注入
構造器注入
在bean中定義參照型別屬性並提供可存取的set方法
import com.itheima.dao.BookDao; import com.itheima.service.BookService; public class BookServiceImpl implements BookService { private BookDao bookDao; public void save() { System.out.println("book service save ..."); bookDao.save(); } public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } }
設定中使用property標籤ref屬性注入參照型別物件
<!--注入參照型別--> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"> <!--property標籤:設定注入屬性--> <!--name屬性:設定注入的屬性名,實際是set方法對應的名稱--> <!--ref屬性:設定注入參照型別bean的id或name--> <property name="bookDao" ref="bookDao"/> <property name="userDao" ref="userDao"/> </bean>
BookDaoImpl實現類:
在bean中定義參照型別屬性並提供可存取的set方法
import com.itheima.dao.BookDao; public class BookDaoImpl implements BookDao { private String databaseName; private int connectionNum; //setter注入需要提供要注入物件的set方法 public void setConnectionNum(int connectionNum) { this.connectionNum = connectionNum; } //setter注入需要提供要注入物件的set方法 public void setDatabaseName(String databaseName) { this.databaseName = databaseName; } public void save() { System.out.println("book dao save ..." + databaseName + "," + connectionNum); } }
applicationContext.xml設定:
設定中使用property屬性value注入簡單型別物件
<!--注入簡單型別--> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"> <!--property標籤:設定注入屬性--> <!--name屬性:設定注入的屬性名,實際是set方法對應的名稱--> <!--value屬性:設定注入簡單型別資料值--> <property name="connectionNum" value="100"/> <property name="databaseName" value="mysql"/> </bean>
在bean中定義參照型別屬性並提供可存取的構造方法
public class BookServiceImpl implements BookService{ private BookDao bookDao; private UserDao userDao; public BookServiceImpl(BookDao bookDao, UserDao userDao) { this.bookDao = bookDao; this.userDao = userDao; } }
設定中使用constructor-arg標籤ref屬性注入參照型別物件
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/> <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"> <constructor-arg name="userDao" ref="userDao"/> <constructor-arg name="bookDao" ref="bookDao"/> </bean>
在bean中定義參照型別屬性並提供可存取的構造方法
public class BookDaoImpl implements BookDao { private String databaseName; private int connectionNum; public BookDaoImpl(String databaseName, int connectionNum) { this.databaseName = databaseName; this.connectionNum = connectionNum; } }
設定中使用constructor-arg標籤ref屬性注入參照型別物件
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"> <!--根據構造方法引數名稱注入--> <constructor-arg name="connectionNum" value="10"/> <constructor-arg name="databaseName" value="mysql"/> </bean>
設定中使用constructor-arg標籤type屬性注入參照型別物件
<!--解決形參名稱的問題,與形參名不耦合--> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"> <!--根據構造方法引數型別注入--> <constructor-arg type="int" value="10"/> <constructor-arg type="java.lang.String" value="mysql"/> </bean>
設定中使用constructor-arg標籤index屬性注入參照型別物件
<!--解決引數型別重複問題,使用位置解決引數匹配--> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"> <!--根據構造方法引數位置注入--> <constructor-arg index="0" value="mysql"/> <constructor-arg index="1" value="100"/> </bean>
1、強制依賴使用構造器進入,使用setter注入有概率不進入注入導致null物件出現
2、可選依賴使用setter注入進行,靈活性強
3、Spring框架倡導使用構造器,第三方框架內部大多數採用構造器注入的形式進行資料初始化,相對嚴謹
4、如果有必要可以兩者同時使用,使用構造器注入完成強制依賴的注入,使用setter注入完成可依賴的注入
5、實際開發過程中還要根據實際情況分析,如果受控物件沒有提供setter方法就必須使用構造器注入
6、自己開發的模組推薦使用setter注入
到此這篇關於Spring依賴注入(DI)兩種方式的範例詳解的文章就介紹到這了,更多相關Spring依賴注入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45