【Springboot】排除多余依赖与Bean实例
一、背景: 引入公共包之后,需要排除部分不需要的包和bean,给当前服务最大程度减重
二、实现:
1.在pom.xml排除依赖
2.在启动类上添加扫描排除项
1 2 3 4 5 6 7 8 9 10 11 12 13 | @ComponentScan (basePackages = { "com.xxx" }, excludeFilters = { @ComponentScan .Filter( type = FilterType.CUSTOM, classes = {ScanExcludeFilter. class } ) }) public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application. class , args); } } |
其中,FilterType有以下几种:
1 2 3 4 5 6 7 8 9 | public enum FilterType { ANNOTATION, //按照注解过滤 ASSIGNABLE_TYPE, //按照类型过滤 ASPECTJ, //按照ASPECTJ表达式过滤 REGEX, //按照正则表达式过滤 CUSTOM; //按照自定义的过滤规则过滤 private FilterType() { } } |
3.实现TypeFilter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | public class ScanExcludeFilter implements TypeFilter { // 需要的Bean包含的关键字 private static final List<String> containsKeyWords = Arrays.asList( "core.config" , "common.dao" ); // 不能的Bean包含的关键字 private static final List<String> excludeKeyWords = Arrays.asList( "XxxConfig" ); @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { ClassMetadata classMetadata = metadataReader.getClassMetadata(); String className = classMetadata.getClassName(); if (!className.contains( "ema" )) { return false ; } // 先走排除 if (isExculdeBean(className)) { return true ; } // 再看是否真的满足 return !needContains(className); } // 匹配不需要的bean private boolean isExculdeBean(String className) { for (String keyword : excludeKeyWords) { if (className.contains(keyword)) { return true ; } } return false ; } // 匹配需要的bean private boolean needContains(String className) { for (String keyword : containsKeyWords) { if (className.contains(keyword)) { return true ; } } return false ; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix