单例中的 Spring Prototype 作用域 bean

2024-01-06

我正在尝试注入prototype豆子在一个singleton这样,每次对单例 bean 方法的新调用都会有一个原型 bean 的新实例。

考虑一个单例 bean,如下所示:

    @Component
    public class SingletonBean {
       @Autowired 
       private PrototypeBean prototypeBean;

       public void doSomething() {
         prototypeBean.setX(1);
         prototypeBean.display();
       }
    }

我期望每次doSomething()方法被调用,一个新的PrototypeBean使用实例。

下面是原型 bean:

     @Component 
     @Scope(value="prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
     public class PrototypeBean {
        Integer x;

        void setX(Integer x) {
         this.x = x;
        }

        void display() {
          System.out.println(x);
        }
    }

似乎正在发生的事情是 spring 过于急于在中移交 Prototype Bean 的新实例doSomething()方法。也就是里面的2行代码doSomething()方法在每一行中创建一个新的prototypeBean实例。

所以在第二行 -prototypeBean.display() prints NULL.

此注入的配置中缺少什么?


从春天开始文档 http://docs.spring.io/spring/docs/3.0.0.RELEASE/spring-framework-reference/html/beans.html#beans-factory-scopes:

您不需要使用<aop:scoped-proxy/>和这个结合 范围为单例或原型的 bean。如果你尝试 为单例 bean 创建一个作用域代理,即 BeanCreationException 被提出。

3.2 版本的文档似乎发生了一些变化文档 http://docs.spring.io/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/reference/htmlsingle/哪里可以找到这句话:

您不需要使用<aop:scoped-proxy/>和这个结合 范围为单例或原型的 bean。

看来您不希望使用代理原型 bean,因为每次都向BeanFactory它将创建它的一个新实例。


为了为你的原型 bean 建立一种工厂,你可以使用ObjectFactory如下:

@Component
public class SingletonBean {

    @Autowired
    private ObjectFactory<PrototypeBean> prototypeFactory;

    public void doSomething() {
        PrototypeBean prototypeBean = prototypeFactory.getObject();
        prototypeBean.setX(1);
        prototypeBean.display();
    }
}

你的原型 bean 将声明如下:

@Component 
@Scope(value="prototype")
public class PrototypeBean {
    // ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单例中的 Spring Prototype 作用域 bean 的相关文章

随机推荐

  • 使用枚举描述绑定组合框

    我通过 Stackoverflow 发现有一种简单的方法可以用枚举填充组合框 cbTipos DataSource Enum GetValues typeof TiposTrabajo 就我而言 我为我的枚举定义了一些描述 public e
  • 如何捕获屏幕的一部分

    我正在使用 win32 PrintWindow 函数将屏幕捕获到 BitMap 对象 如果我只想捕获窗口的一部分区域 如何裁剪内存中的图像 这是我用来捕获整个窗口的代码 System Runtime InteropServices DllI
  • 有没有办法在 C# 中抑制警告,类似于 Java 的 @SuppressWarnings 注释?

    有没有办法在 C 中抑制警告 类似于 Java 的 SuppressWarnings 注释 如果做不到这一点 是否有另一种方法可以抑制 Visual Studio 中的警告 Yes 如需禁用 请使用 pragma warning disab
  • Python:文件中的反斜杠(\u...)

    我有一个包含 u 格式的 unicode 字符的文件 我想将它们作为普通的 unicode 字符串写入另一个文件 但我无法将反斜杠解释为转义字符 所以我把它放在一个文件中 例如 u1203 u1208 u1208 u0074 u00E4 u
  • C++ 类函数应该以 } 结尾吗?或者只有一个}?

    关于 C 语法的基本问题 C 函数应该以 结尾吗 或者没关系 或者这两个例子有什么区别 有结局 void Test print 没有 void Test print 我见过有或没有的 C 代码 但我不明白有什么区别 Thanks Updat
  • 如何将 xsd 转换为人类可读的文档? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们有一些基于 XML 的接口 这些接口在 XSD 模式中得到了很好的记录 这些接口现在将公开 我们希望为它们创建参考文档 有没有一个工具
  • java 8 中删除 JDBC ODBC 桥

    从 Java 8 开始 JDK 将不再包含 JDBC ODBC Bridge Class forName sun jdbc odbc JdbcOdbcDriver classNotFoundException is thrown 还有其他连
  • 在 PictureBox 中绘制火车时,C# 中出现内存不足异常

    我正在尝试创建一个应用程序来显示在线火车picturebox 所以为了实现这个我创建了一个worker thread为了获得在线火车位置 所以我定义了线程 如下所示 private Thread workerThread null priv
  • 应如何实施电子邮件地址选择加入?

    设想 用户给您一个电子邮件地址 在他们注册服务之前 他们需要验证电子邮件地址 您通过电子邮件发送一个 URL 他们单击它 然后他们就可以订阅服务 问题 网址是什么样的 我认为随机指南就可以了 您是否使用相同的随机密钥来取消订阅请求 我应该考
  • boost 正则表达式中的链接器错误

    我想了解有关 boost lib 中的正则表达式的一些知识 我尝试编译这个简单的示例代码 regex search example include
  • Scala 2.10.1 中新的脱糖行为

    假设我有这个单子类 case class Foo A xs List A def map B f A gt B Foo xs map f def flatMap B f A gt Foo B Foo xs flatMap f andThen
  • 使用 App Engine SDK 进行并行模块部署

    TL DR 有没有办法并行部署 App Engine 模块 我使用 Google 构建了一个 go 应用程序适用于 Go 的 App Engine SDK https cloud google com appengine downloads
  • Async Await 等待所有结果并继续

    我对如何实现异步等待方法并在继续之前等待结果有点困惑 我想并行对后端进行 3 次调用 并等待它们响应 然后获取结果并在内部分配它们 像这样的事情 Private Sub GetParseExpressionResults If Not is
  • iOS Core Data:将获取请求的结果转换为数组

    我正在尝试将获取请求的结果放入数组中 我的代码 let appDelegate UIApplication sharedApplication delegate as AppDelegate let managedContext appDe
  • 在 PostgreSQL 中提取 xml 标签的值

    下面是我的 Postgres 表的列响应 我想从 Postgres 数据库中的所有行中提取状态 状态的大小可能不同 例如SUCCESS所以我不想使用子字符串函数 有办法做到吗
  • 实时显示 Google Analytics 数据

    我想显示自本月初以来网站上的访问者数量 当天和当前在网站上的用户数量 我安装了 Google Analytics 我尝试通过从开发人员控制台启用 Google Analytics API 来使用嵌入 API 来解决此问题 但我需要用户授权等
  • ES6模块的“导入”正式兼容CommonJS和AMD?

    从这篇文章 https hacks mozilla org 2015 08 es6 in deep modules https hacks mozilla org 2015 08 es6 in depth modules 文中写道 新标准旨
  • iPhone如何自动插入小数位?

    我知道过去曾多次问过这个问题 但我尝试的一切都失败了 我有一个带有 UILabel 的自定义数字键盘 当我点击 1 时 UILabel 显示一个 1 现在这就是我想做的 当我点击 1 按钮时 我想要 UILabel 中的 0 01 接下来是
  • 这是什么意思? “解析错误:语法错误,意外的 T_PAAMAYIM_NEKUDOTAYIM”

    T PAAMAYIM NEKUDOTAYIM 听起来确实很异国情调 但对我来说绝对是胡说八道 我将其全部追溯到这行代码 在构造函数中我创建了一个 Config 对象 这是课程 final c
  • 单例中的 Spring Prototype 作用域 bean

    我正在尝试注入prototype豆子在一个singleton这样 每次对单例 bean 方法的新调用都会有一个原型 bean 的新实例 考虑一个单例 bean 如下所示 Component public class SingletonBea