SpringBoot-ComponentScan-排除jar包中的某个类
//@ComponentScan教程https://blog.csdn.net/winterking3/article/details/114699603
@ComponentScan(value = {"cn.jiangjiesheng.edu","cn.jiangjiesheng.modules.filestore"},
excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
classes = cn.jiangjiesheng.service.PaasUserService.class))
支持多个
@ComponentScan(value = {"cn.jiangjiesheng"},excludeFilters =
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
classes = {ApaasAutoConfiguration.class, CronTools.class}))
支持自定义:
@ComponentScan(value = {"cn.jiangjiesheng"},excludeFilters =
@ComponentScan.Filter(type = FilterType.CUSTOM, classes = {ExcludeTypeFilter.class}))
package cn.jiangjiesheng.fst.config.bean;
import org.springframework.core.type.ClassMetadata;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;
import java.io.IOException;
public class ExcludeTypeFilter implements TypeFilter {
@Override
public boolean match(MetadataReader metadataReader,
MetadataReaderFactory metadataReaderFactory) throws IOException {
ClassMetadata classMetadata = metadataReader.getClassMetadata();
String className = classMetadata.getClassName();
//一般是全包名的
//System.out.println("--类名--:"+className);
for (String keyWord : RemoveBean.REMOVE_BEAN_KEYWORD_LIST) {
boolean contains = className.toLowerCase().contains(keyWord);
if (contains) {
System.out.println("本次移除了:"+ className);
return true;
}
}
return false;
}
}
另外一个移除bean的
package cn.jiangjiesheng.fst.config.bean;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class RemoveRegistyBeanFactoryPostProcessor implements BeanDefinitionRegistryPostProcessor {
//RefreshAutoConfiguration internalEventListenerFactory
//TODO 这个还是要加个开关判断的
//注意写入全小写的
//移出bean。 aa是bean的名称 https://blog.csdn.net/woyixinyiyi/article/details/109577135
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry)
throws BeansException {
String[] beanDefinitionNames = beanDefinitionRegistry.getBeanDefinitionNames();
// System.out.println("beanDefinitionNames:" + JSON.toJSONString(beanDefinitionNames));
// if (beanDefinitionRegistry.containsBeanDefinition("nacosDiscoveryEndpointAutoConfiguration")) {
// beanDefinitionRegistry.removeBeanDefinition("nacosDiscoveryEndpointAutoConfiguration");
// }
//因为有的bean是全包名的com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,
且和控制台中报错的堆栈类名不完全一样。
//所以还是按关键字来移除吧
for (String beanDefinitionName : beanDefinitionNames) {
for (String keyWord : RemoveBean.REMOVE_BEAN_KEYWORD_LIST) {
boolean contains = beanDefinitionName.contains(keyWord);
if (contains) {
beanDefinitionRegistry.removeBeanDefinition(beanDefinitionName);
System.out.println("本次移除了:"+ beanDefinitionName);
}
}
}
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory)
throws BeansException {
}
}
package cn.jiangjiesheng.fst.config.bean;
import com.google.common.collect.Lists;
import java.util.List;
public class RemoveBean {
public final static List<String> REMOVE_BEAN_KEYWORD_LIST = Lists.newArrayList(
"nacos",
"dubbo",
"braveautoconfiguration",
"apaasautoconfiguration",
"crontools",
"dubboautoconfiguration",
"zipkinautoconfiguration"
);
}
正文到此结束
- 本文标签: Spring Boot Spring Java
- 本文链接: https://code.jiangjiesheng.cn/article/29
- 版权声明: 本文由小江同学原创发布,转载请先联系本站长,谢谢。