在运行时生成Spring动态字段值(类似于CDI @Produces)

时间:2019-04-03 18:57:17

标签: spring inversion-of-control cdi aop

在CDI中,我们可以创建将为特定的InjectionPoint调用的生产者:

@ApplicationScoped
public class IntProducer implements Serializable {

    @Produces @MyCustomAnnotation
    Integer getInt(InjectionPoint injectionPoint) {
        return someConfigurationMap.getDynamicallyChangedInt();
    }
}

此生产者可以在这里使用:

class MyBean {

   @MyCustomAnnotation
   @Inject
   int myIntProp;
}

当客户端调用属性myIntProp时,将调用生产者。 因此,每次myIntProp中的someConfigurationMap更改时,使用MyBean的客户都会获得新的财产。

是否可以在Spring中进行相同的操作(使用自定义注释或@Value)。 我知道的是,所有值都在应用程序启动期间注入到bean中。并且,如果需要更改任何字段值,则可以遍历所有bean,并使用反射重新注入更改的字段值。 或者也许可以通过创建一些代理来使用AOP来拦截字段调用(我只知道方法和构造函数拦截器)。

0 个答案:

没有答案