我有一个有状态的 Spring bean。如何在我的应用程序中强制执行其使用范围原型(prototype)?
如何防止我的项目中的其他开发人员使用单例范围注入(inject)此 bean?
我知道您可以通过注释或 xml 配置来配置范围。据我所知,使用 Spring 3 时,注释配置的范围会被 xml 中手动定义的范围覆盖。如何通过配置或编程方式强制执行我的范围,以便我的 bean 永远不会被用作单例?
我考虑过在应用程序启动时检查 bean 范围,但这听起来不是一个优雅的解决方案。
最佳答案
这并不优雅,但据我所知,这是实现您想要的目标的唯一方法
public class MyStatefulBean implements InitializingBean, ApplicationContextAware, BeanNameAware {
private String myName;
private ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
@Override
public void setBeanName(String s) {
this.myName = s;
}
@Override
public void afterPropertiesSet() throws Exception {
if(this.context.isSingleton(this.myName))
throw new RuntimeException("Bean CANNOT be singleton");
}
}
关于java - 如何强制 Spring beans 的原型(prototype)范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8538953/