您好,登錄后才能下訂單哦!
今天小編給大家分享一下Spring依賴注入的兩種方式是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
思考:向一個類中傳遞數據的方式有幾種?
普通方法(set方法)
構造方法
思考:依賴注入描述了在容器中建立bean與bean之間依賴關系的過程,如果bean運行需要的是數字或字符串呢?
引用類型
簡單類型(基本數據類型與String)
依賴注入方式:
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依賴注入的兩種方式是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。