詳解springboot項目啟動時如何排除用不到的bean
springboot默認封裝了很多的組件,并且把這些組件都進行了自動化配置封裝。也就是說,只要是springboot項目,啟動類在@SpringBootApplication注解下,在不需要單獨配置bean的情況下,本項目所用到的bean在容器啟動的時候都會被自動掃描并注入到IOC容器里。這里我所說的bean主要指的是pom文件里面配置的那些starter,以及還有一些springboot默認封裝的一些組件,比如數(shù)據(jù)源,redis等一些組件。
拿數(shù)據(jù)源來說,有時候我們可能并不想使用springboot默認的數(shù)據(jù)源,該怎么辦?就需要在容器啟動的時候進行排除掉。
在這方面,@ComponentScan 和 @SpringBootApplication 注解提供了兩種不同的方式來實現(xiàn)這個目標。
1. @ComponentScan 的 excludeFilters 屬性
@ComponentScan 注解是用于配置包掃描的注解,其中的 excludeFilters 屬性允許你排除特定類型的組件。這在你想要細粒度地控制哪些組件被掃描時非常有用。
@Configuration
@ComponentScan(basePackages = "com.example",
excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = ExcludedClass.class))
public class YourConfigurationClass {
// Your configuration code here
}
在這個例子中,ExcludedClass 類及其子類將被排除在組件掃描之外。
2. @SpringBootApplication 的 exclude 屬性
@SpringBootApplication 是一個復合注解,它包含了 @ComponentScan 注解,同時還包含了其他元數(shù)據(jù),比如 @EnableAutoConfiguration,用于自動配置。通過 exclude 屬性,你可以在項目的啟動類上直接排除自動配置類。
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class YourSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(YourSpringBootApplication.class, args);
}
}
在這個例子中,DataSourceAutoConfiguration 自動配置類將被排除在Spring Boot應(yīng)用程序的啟動過程中。
3、兩者的對比矩陣
| 特性 | @ComponentScan 的 excludeFilters | @SpringBootApplication 的 exclude |
|---|---|---|
| 作用范圍 | 指定要掃描的包,可選擇性排除特定類型的組件 | 在Spring Boot應(yīng)用程序的啟動類上使用,通常用于排除自動配置類 |
| 排除方式 | 使用 FilterType 指定排除的類型,如 ASSIGNABLE_TYPE | 直接指定要排除的自動配置類的 Class 對象 |
| 適用場景 | 主要用于排除特定類型的組件,不僅限于自動配置類 | 主要用于排除自動配置類,更符合Spring Boot的整體結(jié)構(gòu) |
| 示例 | java @ComponentScan(basePackages = "com.example", excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = ExcludedClass.class)) | java @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class YourSpringBootApplication { public static void main(String[] args) { SpringApplication.run(YourSpringBootApplication.class, args); } } |
使用這兩種方式,你可以根據(jù)具體需求靈活地排除不需要的組件或自動配置類,以定制化你的Spring Boot應(yīng)用程序。
4、小結(jié)
通常情況下,springboot項目啟動時,如果不配置掃描包路徑,那么它默認是掃描和啟動類同級目錄下及其子目錄下的@Component。
如果配置了掃描包路徑,那么它就會在此基礎(chǔ)上額外再去掃描配置的包路徑下的@Component
所有遵循stater規(guī)范的依賴包starter本身并不會受制于啟動類@SpringBootApplication啟動類的掃描包路徑的影響,因為@EnableAutoConfiguration注解(全名org.springframework.boot.autoconfigure.EnableAutoConfiguration) 自動就會掃描
需要單獨指定掃描包路徑的通常并不是一個starter,因為這些依賴或者組件包里面的@Component是散裝的,沒有被一個配置類統(tǒng)一管理,也沒有被@EnableAutoConfiguration修飾過。
以上就是springboot項目啟動時如何排除用不到的bean的詳細內(nèi)容,更多關(guān)于springboot排除用不到的bean的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于spring+quartz的分布式定時任務(wù)框架實現(xiàn)
在Spring中的定時任務(wù)功能,最好的辦法當然是使用Quartz來實現(xiàn)。這篇文章主要介紹了基于spring+quartz的分布式定時任務(wù)框架實現(xiàn),有興趣的可以了解一下。2017-01-01
eclipse+myeclipse 環(huán)境配置方法
eclipse+myeclipse配置環(huán)境2009-07-07
解決try-catch捕獲異常信息后Spring事務(wù)失效的問題
這篇文章主要介紹了解決try-catch捕獲異常信息后Spring事務(wù)失效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

