Java 查找带有特定注释的已加载类
我正在编写一个自定义的、跨平台的序列化方法,该方法通过如下注释类来支持自定义类型(标准类型为字符串、数字、映射、列表等):Java 查找带有特定注释的已加载类,java,annotations,classpath,Java,Annotations,Classpath,我正在编写一个自定义的、跨平台的序列化方法,该方法通过如下注释类来支持自定义类型(标准类型为字符串、数字、映射、列表等): @CompactTypeName("myapp.BetweenFilter") public static class BetweenFilter implements NumericFilter { static { CompactSerializer.registerClass(BetweenFilter.class); }
@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
的类,您需要扫描类路径。基本上:你必须
- 查找每个类路径元素(文件夹或Jar)
- 遍历每个元素以查找名为*.class的所有项(通过遍历文件系统或jar条目)
- 加载类
- 检查它们是否有注释(如果您查找方法注释,请扫描类路径上所有类的所有方法)
Spring有高度专业化的课程来完成所有这些。您可以从头开始编写此功能,但这是一个巨大的痛苦。查找有关Java 6中注释处理器的更多信息。这个问题可能与此相关:我正在使用Phill Sacre发布的链接中的Google Reflections