在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来拦截字段调用(我只知道方法和构造函数拦截器)。