当前位置: 首页 > 知识库问答 >
问题:

使用org.reflection从Java中的特定类获取带注释的方法

申高卓
2023-03-14

我需要从各种类中检索一些带注释的方法。我使用的代码是:

    Reflections reflections = new Reflections(
            new ConfigurationBuilder()
            .setUrls(ClasspathHelper.forPackage("my.package"))
            .setScanners(new MethodAnnotationsScanner())
            );


    Set<Method> resources =
        reflections.getMethodsAnnotatedWith(org.testng.annotations.Test.class);

我找到了Reflections类的代码。但是,这段代码是针对整个的(而且,由于某种原因,代码返回我的项目中的所有带注释的方法,而不仅仅是指定的包)。

但是,我只想从一个特定的类中获得带注释的方法。我无法理解javadoc的反射

我如何更改构造函数,以便只返回来自特定类的带注释的方法?

共有1个答案

汪栋
2023-03-14

您将需要使用输入过滤器来排除其他类。这里有一个例子(注意:如果有任何类嵌套在MyClass中,它们也会被匹配。)

    final String className = MyClass.class.getCanonicalName();
    final Predicate<String> filter = new Predicate<String>() {
        public boolean apply(String arg0) {
            return arg0.startsWith(className);
        }
    };

    Reflections reflections = new Reflections(
            new ConfigurationBuilder()
            .setUrls(ClasspathHelper.forClass(MyClass.class))
            .filterInputsBy(filter)
            .setScanners(new MethodAnnotationsScanner()));

    Set<Method> resources =
            reflections.getMethodsAnnotatedWith(org.testng.annotations.Test.class);
 类似资料:
  • 我有一门课,比如下面的测试 有一个C1班 我给这门课打电话如下 当我调试时,我将i1设置为null。 请告知我做错了什么 注意:。我必须在xyx()中使用类Test,因为它是伪代码,并且xyx()中有很多代码

  • 问题内容: 我有一个名为@Pojo的自定义注释,可用于自动生成Wiki文档: 我这样使用它: 注释资源方法,以便注释处理器可以自动生成描述所需资源和类型的Wiki页面。 我需要在注释处理器中读取该字段的值,但出现运行时错误。 在我的处理器的源代码中,我有以下几行: 但实际的类不适用于处理器。我认为我需要一个替代品来代替实际课程。我不确定该怎么买。 我得到的错误是: 该是我的一个提到的一类注释。 不

  • 作为我的一个要求,我创建了一个包含多个方法的inteface,每个方法都用我自己的java自定义注释进行了注释。我的实现类有一个spring aop方面,但我无法获得aop方面的自定义注释。在进行调试后,我明白了我的自定义注释是接口的一部分,而不是在实现类中。

  • 问题内容: 我需要 在类中使用@X注释的方法或使用@X注释的方法的切入点 。我还 需要注释对象 。如果同时注释了类和方法,则 我更喜欢将方法注释作为参数 。 我尝试了以下操作,这将创建“不一致的绑定”警告。(为什么不将它们设置为null?) 下面创建“跨’||’的参数x的模糊绑定 在切入点”警告。(我认为这并不一定有意义:为什么不绑定第一个短路评估?) 如果存在类和方法注释,则将先前的尝试自然地分

  • 我创建了自定义注释。我将用它来注释方法参数。 我在这里找到了一些示例代码,展示了如何创建针对自定义注释的切入点。 所以现在,我创建了一个带切入点的方面。但是我不知道如何获得用注释的参数值。

  • 例如,我有一个stacktrace: 调用 方法a()- 在我的示例中,ClassC: method C()用@Cacheable注释。我需要在ClassFinal: Method odD()中得到这个注释,如下所示: 我已经使用反射做到了这一点,但它不适用于过载: 我的程序的真正堆栈: Teste。a(Teste.java:14)以@cacable 标记,我需要在sendGet(Abstract