SpringBoot項目刪除Bean或者不加載Bean的問題解決
使用@ComponentScan注解中的@ComponentScan.Filter標記不加載。
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASPECTJ, pattern ={"包名"})})@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = 類名.class)})實現(xiàn)BeanFactoryPostProcessor接口,編譯完畢后刪除 (當然這里你也可以寫一個配置類)
@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,配合自定義過濾器,實現(xiàn)TypeFilter接口,指定不編譯不加載某些Bean
@SpringBootApplication
@ComponentScan(excludeFilters = @ComponentScan.Filter(
// 使用自定義過濾器
type = FilterType.CUSTOM,
// 指定自定義過濾器類
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: 自定義排除過濾器:實現(xiàn)自定義的排除邏輯,返回true表示排除該類,返回false表示包含該類。
* @Version: 1.0
**/
public class CustomExcludeFilter implements TypeFilter {
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) {
// 在這里實現(xiàn)自定義的排除邏輯。例如,根據(jù)類的名稱、包名或其他屬性來決定是否排除該類。這里獲得是類的全限定名。版本升級請注意
String className = metadataReader.getClassMetadata().getClassName();
if (className != null && className.startsWith("包名")) {
// 返回true表示排除該類。
return true;
}
// 返回false表示包含該類。
return false;
}
}到此這篇關(guān)于SpringBoot項目刪除Bean或者不加載Bean的文章就介紹到這了,更多相關(guān)SpringBoot項目不加載Bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javaWeb項目部署到阿里云服務Linux系統(tǒng)的詳細步驟
這篇文章主要介紹了javaWeb項目部署到阿里云服務Linux系統(tǒng),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
springboot springmvc拋出全局異常的解決方法
這篇文章主要為大家詳細介紹了springboot springmvc拋出全局異常的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
詳解Spring boot/Spring 統(tǒng)一錯誤處理方案的使用
這篇文章主要介紹了詳解Spring boot/Spring 統(tǒng)一錯誤處理方案的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
SpringCloud如何創(chuàng)建一個服務提供者provider
這篇文章主要介紹了SpringCloud如何創(chuàng)建一個服務提供者provider,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07

