我有一个注解@MyAnnotation
,我可以用它来注解任何类型(类)。然后我有一个名为 AnnotatedClassRegister
的类,我希望它注册所有用 @MyAnnotation
注释的类,以便我以后可以访问它们。如果可能的话,我想在创建 AnnotatedClassRegister
时自动注册这些类,最重要的是在实例化带注释的类之前。
我有 AspectJ 和 Guice 可供使用。到目前为止我想出的唯一解决方案是使用 Guice 将 AnnotatedClassRegister
的单例实例注入(inject)一个方面,它搜索所有用 @MyAnnotation
注释的类,并且它添加在其构造函数中注册此类所需的代码。这个解决方案的缺点是我需要实例化每个带注释的类,以便实际运行 AOP 添加的代码,因此我不能利用这些类的惰性实例化。
我的解决方案的简化伪代码示例:
// This is the class where annotated types are registered
public class AnnotatedClassRegister {
public void registerClass(Class<?> clz) {
...
}
}
// This is the aspect which adds registration code to constructors of annotated
// classes
public aspect AutomaticRegistrationAspect {
@Inject
AnnotatedClassRegister register;
pointcutWhichPicksConstructorsOfAnnotatedClasses(Object annotatedType) :
execution(/* Pointcut definition */) && args(this)
after(Object annotatedType) :
pointcutWhichPicksConstructorsOfAnnotatedClasses(annotatedType) {
// registering the class of object whose constructor was picked
// by the pointcut
register.registerClass(annotatedType.getClass())
}
}
我应该使用什么方法来解决这个问题?有什么简单的方法可以通过反射在类路径中获取所有这些带注释的类,这样我就根本不需要使用 AOP 了吗?或者任何其他解决方案?
非常感谢任何想法,谢谢!
最佳答案
有可能:
获取类路径中的所有路径。解析
System.getProperties().getProperty("java.class.path", null)
获取所有路径。使用
ClassLoader.getResources(path)
获取所有资源并检查类:http://snippets.dzone.com/posts/show/4831
关于Java - 注册所有用@MyAnnotation 注释的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5890003/