本文主要是介绍SpringBoot项目删除Bean或者不加载Bean的问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实...
使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASPECTJ, pattern ={"包名"})})
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = 类名.class)})
实现BeanFactoryPostProcessor接口,编译完毕后删除 (当然这里你也可以写一个配置类)
@SpringBootApplication public class EmpServiceApplication implements BeanFactoryPostProcessor { public static void main(Strinjavascriptg[] args) { SpringApplication.run(EmpServiceApplication.class, args); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { // 检查是否是 BeanDefinitipythononRegistry if (beanFactory instanceof BeanDefinitionRegistry) { BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory; // 获取所有Bean的名称 String[] beanNames = beanFactory.getBeanDefinitionNames(); for (String beanName : beanNames) { // 获取Beanhttp://www.chinasem.cn的定义 BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName); // 获取Bean的类名 String beanClassName = beanDefinition.getBeanClassName(); // 自定义排除逻辑 China编程 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,配合自定义过滤器,实现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: 自定义排除过滤器:实现自定义的排除逻辑,返回true表示排除该类,返回false表示包含该类。 * @Version: 1.0 **/ public class CustomExcludeFilter implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) { // 在这里实现自定义的排除逻辑。例如,根据类的名称、包名或其他属性来决定是否排除该类。这里获得是类的全限定名。版本升级请注意 String className = metadataReader.getClassMetadata().getClassName(); if (className != null && className.startsWith("包名")) { // 返回true表示排除该类。 return true; } // 返回false表示包含该类。 return falshttp://www.chinasem.cne; } }
到此这篇关于SpringBoot项目删除Bean或者不加载Bean的文章就介绍到这了,更多相关SpringBoot项目不加载Bean内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于SpringBoot项目删除Bean或者不加载Bean的问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!