Java:使用反射注入字段的最快方法是什么?

jav*_*top 5 java reflection annotations code-injection pojo

假设,我有很多类,它们是使用Java反射构造的(出于某种原因).现在我需要将值后注入到字段中,这些字段用注释@PostInject.

public class SomeClass {
  @PostInject
  private final String someString = null;

  public void someMethod() {
    // here, someString has a value.
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:使用反射设置字段的快速方法什么?
请记住,我需要经常在很多课程上这样做,这就是性能相关的原因.

这个伪代码显示了我通过直觉做的事情:

  • 得到班上的所有领域
    clazz.getFields();
  • check,用@PostInject注释
    eachField.getAnnotation(PostInject.class);
  • 使这些字段可访问
    eachAnnotatedField.setAccessible(true);
  • 将它们设置为某个值
    eachAnnotatedField.set(clazz, someValue);

我害怕获得所有领域是最慢的事情.
当我从一开始就知道它时,我可以得到一个领域吗?

注意:我不能让这些类实现一些接口,这将允许使用方法设置字段.我需要POJO.

注2:为什么我要进行现场注入:从API用户的角度来看,必须能够使用最终字段.此外,当API先验地不知道字段的类型和数量时,不可能使用接口实现字段初始化.

注2b:从用户的角度来看,最终合同没有被打破.它保持最终.首先,字段初始化,然后无法更改.顺便说一句:有很多API使用这个概念,其中一个是JAXB(JDK的一部分).

rsp*_*rsp 7

在构造对象并保存在对象本身中获得的注释字段集或者通过将类的单独映射保留到注释字段集之后,如何执行步骤1到3?

然后,当您需要更新对象中的注入字段时,从对象或单独的映射中检索集合并执行步骤4.