查询Spring和静态工厂中的Bean实例化

时间:2014-12-21 06:55:56

标签: java spring

我在spring中查询bean实例化。

根据Spring Reference文档,在“Instantiating beans”一节中,提到了

“容器本身通过反射调用其构造函数直接创建bean,在某种程度上等同于使用new运算符的Java代码”。

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

所以我的疑问是,因为容器使用Reflection来创建对象,所以它应该能够创建甚至私有构造函数的类的对象。为什么容器应该依赖静态工厂方法? 或者是否有任何其他用于调用静态工厂方法来创建bean的方法?

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

2 个答案:

答案 0 :(得分:0)

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

只有在你使用静态方法或单例等辅助类时才会这样说。因此,实例化这些类是没有意义的。

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

答案 1 :(得分:0)

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