Java - 注册所有用@MyAnnotation 注释的类

标签 java reflection annotations aop guice

我有一个注解@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 了吗?或者任何其他解决方案?

非常感谢任何想法,谢谢!

最佳答案

有可能:

  1. 获取类路径中的所有路径。解析 System.getProperties().getProperty("java.class.path", null) 获取所有路径。

  2. 使用 ClassLoader.getResources(path) 获取所有资源并检查类:http://snippets.dzone.com/posts/show/4831

关于Java - 注册所有用@MyAnnotation 注释的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5890003/

相关文章:

java - 在 war 中如何设置jar覆盖的targetPath?

linq - 如何将 Expression<Func<T, bool>> 转换为 Expression<Func<Type, bool>>?

c++ - 奇怪的 SAL 注释警告

ios - 默认显示当前位置标注

java - 使用 Java 注解限制方法的执行

java - JDBC数据库访问、插入元组

Java 我想保存一个变量,并且我有 2 个小程序

java - 如何在同一包中的其他文件中使用对象数组?

php - 在抽象类中声明的方法中从子项中获取常量覆盖

objective-c - 如何在 objective-c 中找到两个对象之间的细微差异