SpringBoot項(xiàng)目刪除Bean或者不加載Bean的問(wèn)題解決
使用@ComponentScan注解中的@ComponentScan.Filter標(biāo)記不加載。
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASPECTJ, pattern ={"包名"})})@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = 類名.class)})實(shí)現(xiàn)BeanFactoryPostProcessor接口,編譯完畢后刪除 (當(dāng)然這里你也可以寫一個(gè)配置類)
@SpringBootApplication
public class EmpServiceApplication implements BeanFactoryPostProcessor {
public static void main(String[] args) {
SpringApplication.run(EmpServiceApplication.class, args);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
// 檢查是否是 BeanDefinitionRegistry
if (beanFactory instanceof BeanDefinitionRegistry) {
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
// 獲取所有Bean的名稱
String[] beanNames = beanFactory.getBeanDefinitionNames();
for (String beanName : beanNames) {
// 獲取Bean的定義
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
// 獲取Bean的類名
String beanClassName = beanDefinition.getBeanClassName();
// 自定義排除邏輯
if (beanClassName != null && beanClassName.startsWith("包名")) {
// 移除不需要的Bean
registry.removeBeanDefinition(beanName);
System.out.println("Excluded bean: " + beanName);
}}}
else {
throw new IllegalStateException("BeanFactory is not a BeanDefinitionRegistry");
}
}
}使用@ComponentScan,配合自定義過(guò)濾器,實(shí)現(xiàn)TypeFilter接口,指定不編譯不加載某些Bean
@SpringBootApplication
@ComponentScan(excludeFilters = @ComponentScan.Filter(
// 使用自定義過(guò)濾器
type = FilterType.CUSTOM,
// 指定自定義過(guò)濾器類
classes = CustomExcludeFilter.class))
public class ServiceApplication{
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}
}
}import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;
/**
* @Description: 自定義排除過(guò)濾器:實(shí)現(xiàn)自定義的排除邏輯,返回true表示排除該類,返回false表示包含該類。
* @Version: 1.0
**/
public class CustomExcludeFilter implements TypeFilter {
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) {
// 在這里實(shí)現(xiàn)自定義的排除邏輯。例如,根據(jù)類的名稱、包名或其他屬性來(lái)決定是否排除該類。這里獲得是類的全限定名。版本升級(jí)請(qǐng)注意
String className = metadataReader.getClassMetadata().getClassName();
if (className != null && className.startsWith("包名")) {
// 返回true表示排除該類。
return true;
}
// 返回false表示包含該類。
return false;
}
}到此這篇關(guān)于SpringBoot項(xiàng)目刪除Bean或者不加載Bean的文章就介紹到這了,更多相關(guān)SpringBoot項(xiàng)目不加載Bean內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Javassist輕松操作字節(jié)碼的技術(shù)指南
Javassist 是一個(gè) Java 庫(kù),允許你在運(yùn)行時(shí)定義新類或修改現(xiàn)有類文件,本文主要為大家詳細(xì)介紹了如何使用Javassist輕松操作字節(jié)碼,感興趣的小伙伴可以參考一下2025-04-04
Spring循環(huán)依賴之問(wèn)題復(fù)現(xiàn)詳解
這篇文章主要為大家詳細(xì)介紹了Spring的循環(huán)依賴什么時(shí)候會(huì)出現(xiàn)以及如何解決循環(huán)依賴,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下2022-07-07
springboot整合mail實(shí)現(xiàn)郵箱的發(fā)送功能
本文分步驟給大家介紹springboot整合mail實(shí)現(xiàn)郵箱的發(fā)送功能,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-09-09
Java中常用緩存Cache機(jī)制的實(shí)現(xiàn)
這篇文章主要介紹了Java中常用緩存Cache機(jī)制的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Springboot整合分頁(yè)插件PageHelper步驟解析
這篇文章主要介紹了Springboot整合分頁(yè)插件PageHelper步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
SpringBoot重寫addResourceHandlers映射文件路徑方式
這篇文章主要介紹了SpringBoot重寫addResourceHandlers映射文件路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
java實(shí)現(xiàn)簡(jiǎn)單的驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
IntellJ idea使用FileWatch實(shí)時(shí)編譯less文件的方法
這篇文章主要介紹了IntellJ idea使用FileWatch實(shí)時(shí)編譯less文件的相關(guān)資料,需要的朋友可以參考下2018-02-02
IDEA如何對(duì)單個(gè)的java class文件打成jar包
這篇文章主要介紹了IDEA如何對(duì)單個(gè)的java class文件打成jar包問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08

