Spring配置擴(kuò)展之JavaConfig的使用小結(jié)
JavaConfig 的概念
什么是JavaConfig?
JavaConfig 是 Spring 框架中基于純 Java 代碼的配置方式,用于替代傳統(tǒng)的 XML 配置。通過注解(如 @Configuration、@Bean)定義 Spring 容器的組件和依賴關(guān)系,使配置更加類型安全且易于維護(hù)。
為什么使用 JavaConfig?
類型安全:Java 代碼在編譯時(shí)即可檢查類型錯(cuò)誤,而 XML 配置需運(yùn)行時(shí)才能發(fā)現(xiàn)潛在問題。
可讀性強(qiáng):邏輯清晰的 Java 代碼比 XML 更直觀,便于理解組件之間的關(guān)系。
便于重構(gòu):IDE 對(duì) Java 代碼的支持更完善(如自動(dòng)補(bǔ)全、引用跳轉(zhuǎn)),而 XML 缺乏此類工具支持。
模塊化配置:通過 @Import 注解可拆分多個(gè)配置類,靈活組合不同模塊。
與注解驅(qū)動(dòng)開發(fā)協(xié)同:結(jié)合 @ComponentScan 等注解,能無縫整合自動(dòng)掃描和顯式配置。
JavaConfig 的核心注解
@Configuration:標(biāo)記類為配置類,替代 XML 配置文件。@Bean:在方法上聲明返回的對(duì)象由 Spring 容器管理,替代<bean>標(biāo)簽。@ComponentScan:自動(dòng)掃描指定包下的組件(如@Service、@Repository)。
示例代碼:
@Configuration
@ComponentScan("com.example")
public class AppConfig {
@Bean
public DataSource dataSource() {
return new DriverManagerDataSource("jdbc:mysql://localhost:3306/db");
}
}
JavaConfig配置常用注解
@Configuration
標(biāo)注一個(gè)類為配置類,替代傳統(tǒng)的XML配置文件。Spring容器會(huì)將該類中定義的Bean納入管理。
@Bean
在配置類的方法上使用,將方法返回值注冊(cè)為Spring容器中的Bean。默認(rèn)以方法名作為Bean名稱,可通過name屬性指定別名。
@Configuration
public class AppConfig {
@Bean(name = "dataSource")
public DataSource createDataSource() {
return new DruidDataSource();
}
}
@Qualifier
當(dāng)存在多個(gè)同類型Bean時(shí),通過指定Bean名稱解決依賴注入的歧義性問題。需配合@Autowired或@Resource使用。
@Autowired
@Qualifier("mysqlDataSource")
private DataSource dataSource;
@Primary
標(biāo)注在Bean定義上,表示當(dāng)存在多個(gè)同類型Bean時(shí)優(yōu)先注入被標(biāo)記的Bean。與@Qualifier的區(qū)別在于這是提供方標(biāo)記而非消費(fèi)方指定。
@Bean
@Primary
public DataSource primaryDataSource() {
return new HikariDataSource();
}
@PropertySource
加載指定的properties或YAML配置文件到Spring環(huán)境。支持classpath前綴和文件系統(tǒng)路徑,多個(gè)文件可用數(shù)組形式配置。
@Configuration
@PropertySource({"classpath:db.properties", "file:/etc/app/config.yml"})
public class PropertyConfig {}
@Value
注入配置文件中的屬性值,支持SpEL表達(dá)式??稍O(shè)置默認(rèn)值避免屬性不存在時(shí)報(bào)錯(cuò)。
@Value("${jdbc.url:jdbc:mysql://localhost/default}")
private String dbUrl;
@Value("#{systemProperties['user.timezone']}")
private String timezone;
@ComponentScan
自動(dòng)掃描指定包路徑下的組件(@Component/@Service/@Repository等)??赏ㄟ^excludeFilters排除特定組件。
@Configuration
@ComponentScan(
basePackages = "com.example",
excludeFilters = @Filter(type = FilterType.REGEX, pattern = ".*Test.*")
)
public class ScanConfig {}
在Spring框架中,JavaConfig可以通過注解方式加載其他配置,包括XML或JavaConfig。以下是兩種核心方法的具體使用方式:
JavaConfig加載其他配置
@ImportResource注解加載XML配置
該注解用于在JavaConfig中引入XML格式的配置文件,適用于需要兼容舊版XML配置或混合配置的場(chǎng)景。
@Configuration
@ImportResource("classpath:application-context.xml")
public class AppConfig {
// 主配置類內(nèi)容
}
- 路徑格式:支持
classpath:、file:等Spring資源前綴。 - 多文件加載:可通過數(shù)組形式指定多個(gè)文件:
@ImportResource({"classpath:config1.xml", "classpath:config2.xml"})
@Import注解加載其他JavaConfig
該注解用于引入其他Java配置類,實(shí)現(xiàn)配置模塊化。
@Configuration
@Import({DatabaseConfig.class, SecurityConfig.class})
public class AppConfig {
// 主配置類內(nèi)容
}
- 鏈?zhǔn)綄?dǎo)入:被導(dǎo)入的配置類可以繼續(xù)使用
@Import嵌套其他配置。 - 自動(dòng)裝配:導(dǎo)入的配置類中定義的Bean會(huì)被自動(dòng)注冊(cè)到容器。
混合使用場(chǎng)景
兩種注解可以同時(shí)使用,實(shí)現(xiàn)XML與JavaConfig的混合配置:
@Configuration
@Import(DatabaseConfig.class)
@ImportResource("classpath:services.xml")
public class AppConfig {
// 綜合配置類
}
注意事項(xiàng)
- 路徑解析:XML文件需放在資源目錄下,確保編譯后存在于classpath中。
- 循環(huán)依賴:避免配置類之間相互導(dǎo)入形成循環(huán)引用。
- Bean覆蓋:后加載的配置中同名Bean會(huì)覆蓋先前定義的Bean。
到此這篇關(guān)于Spring配置擴(kuò)展之JavaConfig的使用小結(jié)的文章就介紹到這了,更多相關(guān)Spring JavaConfig內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot響應(yīng)json?null值過濾方式
這篇文章主要介紹了springboot響應(yīng)json?null值過濾方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot?項(xiàng)目部署與監(jiān)控的過程
SpringBoot項(xiàng)目部署在互聯(lián)網(wǎng)背景下前后端分離開發(fā)已經(jīng)成為主流趨勢(shì),SpringBoot構(gòu)建web項(xiàng)目非??焖?只需要將其打成一個(gè)jar包,然后通過java-jar命令啟動(dòng),本文介紹SpringBoot?項(xiàng)目部署與監(jiān)控的過程,感興趣的朋友跟隨小編一起看看吧2025-12-12
java內(nèi)存管理關(guān)系及內(nèi)存泄露的原理分析
這篇文章主要介紹了java內(nèi)存管理關(guān)系及內(nèi)存泄露的原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
JAVA 實(shí)現(xiàn)二叉樹(鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu))
本篇文章主要介紹用JAVA 實(shí)現(xiàn)二叉樹,并提供實(shí)例.對(duì)二叉樹數(shù)據(jù)結(jié)構(gòu)很好的學(xué)習(xí)實(shí)踐,有需要的朋友可以參考下2016-07-07
Java虛擬機(jī)JVM之server模式與client模式的區(qū)別
這篇文章主要介紹了Java虛擬機(jī)JVM的client模式和Server模式兩者的區(qū)別和聯(lián)系2017-12-12
Java使用TCP協(xié)議發(fā)送和接收數(shù)據(jù)方式
這篇文章詳細(xì)介紹了Java中使用TCP進(jìn)行數(shù)據(jù)傳輸?shù)牟襟E,包括創(chuàng)建Socket對(duì)象、獲取輸入輸出流、讀寫數(shù)據(jù)以及釋放資源,通過兩個(gè)示例代碼TCPTest01.java和TCPTest02.java,展示了如何在客戶端和服務(wù)器端進(jìn)行數(shù)據(jù)交換2024-12-12
Spring Boot 集成 Mybatis Plus 自動(dòng)填充字段的實(shí)例詳解
這篇文章主要介紹了Spring Boot 集成 Mybatis Plus 自動(dòng)填充字段,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
基于Java web服務(wù)器簡單實(shí)現(xiàn)一個(gè)Servlet容器
這篇文章主要為大家詳細(xì)介紹了基于Java web服務(wù)器簡單實(shí)現(xiàn)一個(gè)Servlet容器,感興趣的小伙伴們可以參考一下2016-06-06
Linux中配置Java環(huán)境變量實(shí)現(xiàn)過程
文章介紹了在Linux系統(tǒng)上安裝Java 1.8的步驟:下載、傳輸、解壓至/opt目錄,配置環(huán)境變量(當(dāng)前用戶或全局),使用update-alternatives設(shè)置默認(rèn)版本,并通過命令驗(yàn)證安裝是否成功2025-07-07

