springboot中获取指定包下的包含某个注解的全部类(转)
来自:https://www.cnblogs.com/lexiaoyao1995/p/13943784.html
需求
获取spring项目里的带有某个注解的全部类
难点
需要扫描指定包路径下的类,同时也要扫描其下所有子包
思路
可以自己实现,推荐使用spring的工具类
代码
package com.example.demo; import com.example.demo.annos.MyAnno; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.core.type.classreading.CachingMetadataReaderFactory; import org.springframework.core.type.classreading.MetadataReader; import org.springframework.core.type.classreading.MetadataReaderFactory; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.util.ClassUtils; import java.io.IOException; import java.util.HashMap; import java.util.Map; @RunWith(SpringRunner.class) @SpringBootTest public class DemoApplicationTests { private final String BASE_PACKAGE = "com.example.demo"; private final String RESOURCE_PATTERN = "/**/*.class"; @Test public void test() { Map<String, Class> handlerMap = new HashMap<String, Class>(); //spring工具类,可以获取指定路径下的全部类 ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); try { String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + RESOURCE_PATTERN; Resource[] resources = resourcePatternResolver.getResources(pattern); //MetadataReader 的工厂类 MetadataReaderFactory readerfactory = new CachingMetadataReaderFactory(resourcePatternResolver); for (Resource resource : resources) { //用于读取类信息 MetadataReader reader = readerfactory.getMetadataReader(resource); //扫描到的class String classname = reader.getClassMetadata().getClassName(); Class<?> clazz = Class.forName(classname); //判断是否有指定主解 MyAnno anno = clazz.getAnnotation(MyAnno.class); if (anno != null) { //将注解中的类型值作为key,对应的类作为 value handlerMap.put(classname, clazz); } } } catch (IOException | ClassNotFoundException e) { } } }
标签:
Spring
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2021-04-12 TLPI读书笔记第15章-文件属性2
2021-04-12 TLPI读书笔记第15章-文件属性1
2021-04-12 TLPI读书笔记第14章-系统编程概念2
2021-04-12 TLPI读书笔记第14章-系统编程概念1
2021-04-12 TLPI读书笔记第19章-监控文件事件