Spring依賴注入與第三方Bean管理基礎(chǔ)詳解
1. 注解開發(fā)依賴注入
1.1 使用@Autowired注解開啟自動(dòng)裝配模式
@Service public class BookServiceImpl implements BookService { //@Autowired:注入引用類型,自動(dòng)裝配模式,默認(rèn)按類型裝配 @Autowired private BookDao bookDao; public void save() { System.out.println("book service save ..."); bookDao.save(); } }
說明:不管是使用配置文件還是配置類,都必須進(jìn)行對(duì)應(yīng)的Spring注解包掃描才可以使用。@Autowired默認(rèn)按照類型自動(dòng)裝配,如果IOC容器中同類的Bean有多個(gè),那么默認(rèn)按照變量名和Bean的名稱匹配,建議使用@Qualifier注解指定要裝配的bean名稱
注意:自動(dòng)裝配基于反射設(shè)計(jì)創(chuàng)建對(duì)象并暴力反射對(duì)應(yīng)屬性為私有屬性初始化數(shù)據(jù),因此無需提供setter方法。
1.2 使用@Qualifier注解指定要裝配的bean名稱
目的:解決IOC容器中同類型Bean有多個(gè)裝配哪一個(gè)的問題
@Service public class BookServiceImpl implements BookService { //@Autowired:注入引用類型,自動(dòng)裝配模式,默認(rèn)按類型裝配 @Autowired //@Qualifier:自動(dòng)裝配bean時(shí)按bean名稱裝配 @Qualifier("bookDao") private BookDao bookDao; public void save() { System.out.println("book service save ..."); bookDao.save(); } }
注意:@Qualifier注解無法單獨(dú)使用,必須配合@Autowired注解使用
1.3 使用@Value實(shí)現(xiàn)簡(jiǎ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()中加載多文件請(qǐng)使用數(shù)組格式配置,不允許使用通配符*
2. 注解開發(fā)管理第三方Bean
2.1 單獨(dú)定義配置類
public class JdbcConfig { //@Bean:表示當(dāng)前方法的返回值是一個(gè)bean對(duì)象,添加到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 將獨(dú)立的配置類加入核心配置
@Import注解導(dǎo)入式
@Configuration @ComponentScan("com.itheima") //@Import:導(dǎo)入配置信息 @Import({JdbcConfig.class}) public class SpringConfig { }
3.注解開發(fā)為第三方Bean注入資源
3.1 簡(jiǎn)單類型依賴注入
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表達(dá)式讀取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會(huì)自動(dòng)從IOC容器中找到BookDao對(duì)象賦值給參數(shù)bookDao變量,如果沒有就會(huì)報(bào)錯(cuò)。 @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è)置形參即可,容器會(huì)根據(jù)類型自動(dòng)裝配對(duì)象
4. 注解開發(fā)總結(jié)
到此這篇關(guān)于Spring依賴注入與第三方Bean管理基礎(chǔ)詳解的文章就介紹到這了,更多相關(guān)Spring依賴注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea創(chuàng)建maven父子工程導(dǎo)致子工程無法導(dǎo)入父工程依賴
創(chuàng)建maven父子工程時(shí)遇到一個(gè)問題,本文主要介紹了idea創(chuàng)建maven父子工程導(dǎo)致子工程無法導(dǎo)入父工程依賴,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04SpringBoot實(shí)現(xiàn)quartz定時(shí)任務(wù)可視化管理功能
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)quartz定時(shí)任務(wù)可視化管理功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08SpringBoot中讀取application.properties配置文件的方法
這篇文章主要介紹了SpringBoot中讀取application.properties配置文件的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02Java將文件分割為多個(gè)子文件再將子文件合并成原始文件的示例
本篇文章主要介紹了Java將文件分割為多個(gè)子文件再將子文件合并成原始文件的示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-02-02IntelliJ?IDEA2022中的Java文檔注釋設(shè)置、操作方法
這篇文章主要介紹了IntelliJ?IDEA2022中的Java文檔注釋設(shè)置、操作詳述,本文通過圖文并茂的方式給大家介紹IDEA2022?文檔注釋設(shè)置方法,需要的朋友可以參考下2022-08-08springMVC的RequestMapping請(qǐng)求不到路徑的解決
這篇文章主要介紹了springMVC的RequestMapping請(qǐng)求不到路徑的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08詳解Java8如何使用Lambda表達(dá)式進(jìn)行比較
Lambda表達(dá)式,也可稱為閉包,是java8的新特性,作用是取代大部分內(nèi)部類,優(yōu)化java代碼結(jié)構(gòu),讓代碼變得更加簡(jiǎn)潔緊湊。本文將利用Lambda表達(dá)式進(jìn)行排序比較,需要的可以參考一下2022-01-01