Idea中关于输出控制台中文乱码解决

  • 元注解
@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";
//替换.为/,java中转义字符为\\,此时的packagePath为相对路径com/powernode/bean
String packagePath = packageName.replaceAll("\\.", "/");
//获取完整路径
URL systemResource = ClassLoader.getSystemResource(packagePath);
String path = systemResource.getPath();
//由于path路径有有中文字符,所以windows中的中文重新用utf-8解码,否则乱码
String decodedPath = URLDecoder.decode(path, "UTF-8");
//转换为file实例
File file = new File(decodedPath);
//获取该file实例下的文件
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);
}
posted @   文采杰出  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示