我在spring中查询bean实例化。
根据Spring Reference文档,在“Instantiating beans”一节中,提到了
“容器本身通过反射调用其构造函数直接创建bean,在某种程度上等同于使用new运算符的Java代码”。
这意味着Spring容器使用反射来创建bean。在少数情况下,容器还在类上使用静态工厂方法来创建bean。我知道容器使用静态工厂方法的唯一情况是“当构造者是私人的”时。
所以我的疑问是,因为容器使用Reflection来创建对象,所以它应该能够创建甚至私有构造函数的类的对象。为什么容器应该依赖静态工厂方法? 或者是否有任何其他用于调用静态工厂方法来创建bean的方法?
提前致谢。如果我需要任何基本的理解,请提出建议。
答案 0 :(得分:0)
是的,你是对的如果在配置中定义bean时提供正确的参数,Spring可以调用私有构造函数。但是在我想到的问题是,如果那个bean不是要实例化的话,为什么要这样做呢?
只有在你使用静态方法或单例等辅助类时才会这样说。因此,实例化这些类是没有意义的。
但是在你的情况下,它的工厂和你可能通过调用静态方法(访问静态方法/字段并不一定需要对象访问字段/方法)来获取对象说getShape和你可能会根据您可能提供的参数来获得不同的形状。
答案 1 :(得分:0)
我们有时需要使用一个不是为Spring设计的类,需要通过静态工厂方法实例化,Spring为我们提供了这样的可能性。