java 获取所有已加载类,java – 使用特定注释查找已加载的类

  • Post author:
  • Post category:java


我正在编写一个自定义的跨平台序列化方法,它通过注释这样的类来支持自定义类型(标准类型是字符串,数字,映射,列表等):

@CompactTypeName(“myapp.BetweenFilter”)

public static class BetweenFilter implements NumericFilter {

static {

CompactSerializer.registerClass(BetweenFilter.class);

}

@SuppressWarnings(“unused”)

@Deserialize

private static BetweenFilter compactRead(DataInputStream ins) throws IOException {

return new BetweenFilter(ins.readInt(), ins.readInt());

}

@SuppressWarnings(“unused”)

@Serialize

private void compactWrite(DataOutputStream ous) throws IOException {

ous.writeInt(from);

ous.writeInt(to);

}

}

问题是静态初始化程序在那里创建了对序列化组件的运行时依赖性,而其他部分则没有(运行时不存在的注释被忽略).

要解决这个问题,序列化程序应该有一些方法来查找类并将其与给定的类型名称(“myapp.BetweenFilter”)相关联,而不是使用CompactSerializer注册自己的类.

我怎样才能做到这一点?我知道这是可能的,因为例如Spring-MVC可以使用@Controller自动查找类.

解决方法:

您需要扫描类路径.基本上:你必须这样做

>找到每个classpath元素(文件夹或Jar)

>遍历每个元素以查找名为* .class的所有项目(通过遍历文件系统或jar条目)

>加载类

>检查它们是否有注释(如果查找方法注释,则扫描类路径上所有类的所有方法)

Spring拥有高度专业化的课程来完成所有这些工作.您可以从头开始编写此功能,但这是一个巨大的痛苦.

标签:java,classpath,annotations

来源: https://codeday.me/bug/20190903/1797190.html