【问题标题】:Query on Bean instantiation in spring and static factory查询spring和静态工厂中的Bean实例化
【发布时间】:2014-12-21 06:55:55
【问题描述】:

我对春季的 bean 实例化有疑问。

根据 Spring Reference 文档,在“实例化 bean”部分中提到

" 容器本身通过反射调用其构造函数来直接创建 bean,有点相当于 Java 代码使用 new 运算符 "。

这意味着 Spring 容器使用反射来创建 bean。然而在少数情况下,容器也使用类上的静态工厂方法来创建 bean。我知道容器使用静态工厂方法的唯一情况是“当构造函数是私有的”。

所以我的疑问是,既然容器使用反射来创建对象,它应该也可以创建私有构造函数的类的对象。为什么容器要依赖静态工厂方法? 或者调用静态工厂方法来创建bean还有其他用途吗?

提前致谢。如果我需要任何基本的理解,请提出建议。

【问题讨论】:

    标签: java spring


    【解决方案1】:

    是的,如果您在配置中定义 bean 时提供正确的参数,Spring 可以调用私有构造函数。但是我想到的一个问题是,如果该 bean 不打算实例化,您为什么要这样做?

    只有当你有带有静态方法或单例等的辅助类时才会出现这种情况。所以实例化这些类是没有意义的。

    但在你的情况下,它是工厂,你可能会通过调用静态方法来取回对象(访问静态方法/字段不一定需要对象来访问字段/方法)说 getShape,你可能会得到不同的形状关于您可能提供的参数。

    【讨论】:

      【解决方案2】:

      我们有时需要使用一个不是为 Spring 设计的类,需要通过静态工厂方法实例化,而 Spring 为我们提供了这种可能性。

      【讨论】:

        猜你喜欢
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多