【问题标题】:Spring instantiation of prototype scoped beans under the hood引擎盖下原型作用域 bean 的 Spring 实例化
【发布时间】:2012-09-30 19:58:28
【问题描述】:

Spring 定义了不同的 bean 定义范围,其中一个是 原型范围,它在每次查找时都会提供一个新实例。

我对此有两个疑问..

  1. 在后台,spring 如何创建一个新实例?
  2. 我听说,它使用clone()方法来创建一个新实例,如果是,那么为什么以及如果它使用clone来提供一个新实例,那么克隆对象的状态会发生什么,因为克隆会复制国家也是?

【问题讨论】:

    标签: java spring


    【解决方案1】:
    1. 与任何其他 bean 一样:使用带有 @Autowired 注释的构造函数,或者如果没有任何构造函数,则使用默认构造函数(或者如果定义了工厂方法,则使用工厂方法)。

    2. 你听错了。大多数对象是不可克隆的,因此这样做只会获得异常。而且这没有任何意义,因为

      • 它将无法创建第一个实例
      • 所有实例都与第一个实例相同,这显然不是我们想要的。

    【讨论】:

      【解决方案2】:

      Spring 使用反射机制来创建新实例。 Spring,首先查找单例映射,如果没有找到实例,使用bean定义创建新实例,它将应用定义的生命周期。 所以你听错了。

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-11
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多