如何在类路径中找到具有特定方法注释的所有类?

时间:2009-03-18 17:35:39

标签: java spring annotations

我想在Java中实现一个基于注释的初始化机制。具体来说,我有一个我定义的注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Initialization {

/**
 * If the eager initialization flag is set to <code>true</code> then the
 * initialized class will be initialized the first time it is created.
 * Otherwise, it will be initialized the first time it is used.
 * 
 * @return <code>true</code> if the initialization method should be called
 *         eagerly
 */
boolean eager() default false;

}

另外,我有一个界面:

public interface SomeKindOfBasicInterface {}

我想找到我的类路径上SomeKindOfBasicInterface类的每个实现,它在方法上有@Initialization注释。我正在查看Spring的MetaDataReader工具,这看起来是推迟加载其他SomeKindOfBasicInterface实现的最佳方式,而我正在这样做...但我不确定如何进行搜索就像我在描述的那样。有什么提示吗?

3 个答案:

答案 0 :(得分:10)

您可以使用Reflections,这是一个Java运行时元数据分析工具。我用它来获取给定类型的所有子类型,但它也可以处理你的情况。

答案 1 :(得分:1)

我基本上会创建一个BeanPostProcessor实现,可能基于CommonAnnotationBeanPostProcessor。然后我设置component-scan来扫描类路径并获取符合您规范的所有bean。初始化bean时,将运行后处理器。

我看到我假设你正在寻找豆子。如果不是这种情况,您可能需要自己扫描类路径。

答案 2 :(得分:1)

您可以使用javassist在类中查找注释,甚至在加载它们之前,但是您需要直接读取.class文件,这可能意味着您自己打开JAR等。此外,您还需要知道在哪里寻找课程。您不能只询问运行时BasicInterface的所有子类。