猿问

spring中如何初始化自定义注解

如果我定义一个注释来设置类字段,如下所示:


@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)中注入它?


我在这里找到了这个例子,但我不想自己调用注入方法。


函数式编程
浏览 231回答 1
1回答

一只甜甜圈

您可以为BeanPostProcessorspring 上下文提供一个。public class Injector implements BeanPostProcessor {  @Override  public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {    inject(bean);    return bean;  }}
随时随地看视频慕课网APP

相关分类

Java
我要回答