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 @ 2024-06-01 21:04  文采杰出  阅读(2)  评论(0编辑  收藏  举报