java - 如何强制 Spring beans 的原型(prototype)范围

标签 java spring scope javabeans

我有一个有状态的 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/

相关文章:

java - Android 服务通知 onclick

java - 如何修复 Jaspersoft Studio 插件中由 TraceGovernor 引起的 java.lang.NullPointerException?

java - 使用 Spring Security 登录页面进行表单验证

java - Spring Boot application.properties 值未填充且未读取

Javascript 外部对象全局?

python - 有没有办法禁止 python 函数使用除本地变量之外的任何变量?

java - 我无法使用 musicg 库中的 FingerprintSimilarity

Java HTTP 服务器和资源

java - Spring Security 3.1 重定向到登录不起作用

oauth - 细粒度的 Google OAuth 范围