【问题标题】:Spring Beans ConfigurationsSpring Beans 配置
【发布时间】:2023-03-03 08:21:23
【问题描述】:

如果我们有

1- 一个案例场景,我们将 A 类配置为单例,将子类 B 作为 A 类中的成员,配置为原型。

2- 另一种情况,与第一种情况相反,我们将 A 类定义为原型,将 B 类定义为单例。

当请求 A 类和 B 类时,Spring 容器将如何初始化和处理这两种情况?

【问题讨论】:

    标签: spring javabeans ioc-container


    【解决方案1】:

    请看一下这个答案 - Spring session-scoped beans as dependencies in prototype beans?

    您始终可以将范围更广的 bean(例如单例)注入到 范围更窄的 bean(例如,会话范围的 bean),但对它来说 反过来,你需要一个作用域代理。

    这适用于您的问题。

    1. 您将更窄范围的 bean 注入到更宽范围的 bean 中。 (原型比单例窄)。它应该适合你。

    2. 您正在尝试将范围更广的 bean 注入到更窄范围的 bean 中。您需要使用范围代理。

    【讨论】:

    • 非常感谢您的回答。但这里的问题是……当请求 A 类或 B 类时,spring 将如何处理这两种情况的这些请求? @asg
    • @OmarAlQuaseer 抱歉回答迟了。您的案例 1 很简单,即在单例中注入原型。与单例(寿命较长的 bean)相比,原型是一个范围更窄的 bean(即寿命短的 bean)。因此,你应该没事。
    • 唯一棘手的情况是第二种情况,您试图在原型 bean 中注入单例..(即寿命较短的 bean 中的寿命较长的 bean)。因此对于这种情况,spring 建议使用作用域代理(单例 bean)而不是直接依赖。让我试着给你一些代码。
    • 非常感谢您的回复。你能放一些代码让它更清楚吗?。
    猜你喜欢
    • 2013-02-12
    • 2019-09-10
    • 2015-03-02
    • 2017-06-22
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多