Spring依賴注入與第三方Bean管理基礎(chǔ)詳解
1. 注解開發(fā)依賴注入
1.1 使用@Autowired注解開啟自動裝配模式
@Service public class BookServiceImpl implements BookService { //@Autowired:注入引用類型,自動裝配模式,默認按類型裝配 @Autowired private BookDao bookDao; public void save() { System.out.println("book service save ..."); bookDao.save(); } }
說明:不管是使用配置文件還是配置類,都必須進行對應(yīng)的Spring注解包掃描才可以使用。@Autowired默認按照類型自動裝配,如果IOC容器中同類的Bean有多個,那么默認按照變量名和Bean的名稱匹配,建議使用@Qualifier注解指定要裝配的bean名稱
注意:自動裝配基于反射設(shè)計創(chuàng)建對象并暴力反射對應(yīng)屬性為私有屬性初始化數(shù)據(jù),因此無需提供setter方法。
1.2 使用@Qualifier注解指定要裝配的bean名稱
目的:解決IOC容器中同類型Bean有多個裝配哪一個的問題
@Service public class BookServiceImpl implements BookService { //@Autowired:注入引用類型,自動裝配模式,默認按類型裝配 @Autowired //@Qualifier:自動裝配bean時按bean名稱裝配 @Qualifier("bookDao") private BookDao bookDao; public void save() { System.out.println("book service save ..."); bookDao.save(); } }
注意:@Qualifier注解無法單獨使用,必須配合@Autowired注解使用
1.3 使用@Value實現(xiàn)簡單類型注入
package com.lin.dao.impl; import com.lin.dao.BookDao; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Repository; @Repository public class BookDaoImpl implements BookDao { @Value("${name}") private String name; public void save() { System.out.println("Dao中的save"+" "+name); } }
以上@Value注解中使用${name}從屬性文件中讀取name值,那么就需要在配置類或者配置文件中加載屬性文件。
@Configuration @ComponentScan("com.itheima") //@PropertySource加載properties配置文件 @PropertySource({"classpath:jdbc.properties"}) //{}可以省略不寫 public class SpringConfig { }
注意:@PropertySource()中加載多文件請使用數(shù)組格式配置,不允許使用通配符*
2. 注解開發(fā)管理第三方Bean
2.1 單獨定義配置類
public class JdbcConfig { //@Bean:表示當前方法的返回值是一個bean對象,添加到IOC容器中 @Bean public DataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/spring_db"); ds.setUsername("root"); ds.setPassword("root"); return ds; } }
2.2 將獨立的配置類加入核心配置
@Import注解導入式
@Configuration @ComponentScan("com.itheima") //@Import:導入配置信息 @Import({JdbcConfig.class}) public class SpringConfig { }
3.注解開發(fā)為第三方Bean注入資源
3.1 簡單類型依賴注入
3.1.1 新建jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/db1 jdbc.username=root jdbc.password=1234
3.1.2 在配置類或者配置文件中加載屬性文件。
3.1.3 使用EL表達式讀取properties屬性文件中的內(nèi)容
package com.lin.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import javax.sql.DataSource; public class JdbcConfig { @Value("${jdbc.driver}") private String driverName; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String userName; @Value("jdbc.password") private String password; @Bean public DataSource getDataSource(){ DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverName); dataSource.setUrl(url); dataSource.setUsername(userName); dataSource.setPassword(password); return dataSource; } }
3.2 引用類型依賴注入
//Spring會自動從IOC容器中找到BookDao對象賦值給參數(shù)bookDao變量,如果沒有就會報錯。 @Bean public DataSource dataSource(BookDao bookDao){ System.out.println(bookDao); DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; }
說明:引用類型注入只需要為bean定義方法設(shè)置形參即可,容器會根據(jù)類型自動裝配對象
4. 注解開發(fā)總結(jié)
到此這篇關(guān)于Spring依賴注入與第三方Bean管理基礎(chǔ)詳解的文章就介紹到這了,更多相關(guān)Spring依賴注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea創(chuàng)建maven父子工程導致子工程無法導入父工程依賴
創(chuàng)建maven父子工程時遇到一個問題,本文主要介紹了idea創(chuàng)建maven父子工程導致子工程無法導入父工程依賴,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04SpringBoot實現(xiàn)quartz定時任務(wù)可視化管理功能
這篇文章主要介紹了SpringBoot實現(xiàn)quartz定時任務(wù)可視化管理功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08SpringBoot中讀取application.properties配置文件的方法
這篇文章主要介紹了SpringBoot中讀取application.properties配置文件的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-02-02Java將文件分割為多個子文件再將子文件合并成原始文件的示例
本篇文章主要介紹了Java將文件分割為多個子文件再將子文件合并成原始文件的示例,具有一定的參考價值,有興趣的可以了解一下。2017-02-02IntelliJ?IDEA2022中的Java文檔注釋設(shè)置、操作方法
這篇文章主要介紹了IntelliJ?IDEA2022中的Java文檔注釋設(shè)置、操作詳述,本文通過圖文并茂的方式給大家介紹IDEA2022?文檔注釋設(shè)置方法,需要的朋友可以參考下2022-08-08springMVC的RequestMapping請求不到路徑的解決
這篇文章主要介紹了springMVC的RequestMapping請求不到路徑的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08