代码之家  ›  专栏  ›  技术社区  ›  myborobudur

如何在spring中初始化自定义注释

  •  0
  • myborobudur  · 技术社区  · 6 年前

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    @interface Set {
        int value();
    }
    

    经过必要的反思:

    class Injector {
        public static void inject(Object instance) {
            Field[] fields = instance.getClass().getDeclaredFields();
            for (Field field : fields) {
                if (field.isAnnotationPresent(Set.class)) {
                    Set set = field.getAnnotation(Set.class);
                    field.setAccessible(true); // should work on private fields
                    try {
                        field.set(instance, set.value());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    我会用它来形容:

    class Demo {
        @Set(1)
        public int var;
        public int var2;
    }
    

    如何在启动时在spring(而不是spring boot)中注入此项?

    example here 但我不想自己调用注入方法。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Dean Xu    6 年前

    你可以提供 BeanPostProcessor 以春天为背景。

    public class Injector implements BeanPostProcessor {
      @Override
      public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        inject(bean);
        return bean;
      }
    }