| @Target(value = {ElementType.TYPE}) |
| @Retention(value = RetentionPolicy.RUNTIME) |
| public @interface Component { |
| String value(); |
| } |
| @Component("userBean") |
| public class User { |
| } |
| * 测试 |
| @Test |
| public void ComponentScan() throws UnsupportedEncodingException { |
| HashMap<String, Object> beanMap = new HashMap<>(); |
| String packageName = "com.powernode.bean"; |
| |
| String packagePath = packageName.replaceAll("\\.", "/"); |
| |
| URL systemResource = ClassLoader.getSystemResource(packagePath); |
| String path = systemResource.getPath(); |
| |
| |
| String decodedPath = URLDecoder.decode(path, "UTF-8"); |
| |
| File file = new File(decodedPath); |
| |
| File[] files = file.listFiles(); |
| |
| Arrays.stream(files).forEach(f->{ |
// System.out.println(f.getName());
// System.out.println(f.getName().split("\.")[0]);
String className = packageName + "."+f.getName().split("\.")[0];
// System.out.println(className);
//通过反射机制解析注解
try {
Class<?> aClass = Class.forName(className);
//判断类上是否有这个Component注解
if (aClass.isAnnotationPresent(Component.class)){
//获取注解
Component annotation = aClass.getAnnotation(Component.class);
//获取注解的值
String value = annotation.value();
Object obj = aClass.newInstance();
beanMap.put(value,obj);
// System.out.println(obj);
| }; |
| } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { |
| e.printStackTrace(); |
| } |
| |
| }); |
| System.out.println(beanMap); |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)