当前位置: 首页 > 知识库问答 >
问题:

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

乜心思
2023-03-14

我在Spring对bean实例化有疑问。

根据Spring参考文档,在“实例化bean”一节中提到

“容器本身通过反射式调用它的构造函数直接创建bean,有点等同于使用新运算符Java代码”。

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

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

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

共有2个答案

谭炎彬
2023-03-14

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

赫连泰宁
2023-03-14

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

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

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

 类似资料:
  • 我有一些Spring托管类(通过xml配置),其中一个是SessionFactory,它被注入到另一个Spring托管类中。每当该类需要一个新的会话时,它就调用SessionFactory上的createSession。

  • 问题内容: 我熟悉静态工厂方法的概念和好处,如Joshua Bloch的EffectiveJava中所述: 工厂方法具有名称,因此与构造函数不同,您可以拥有多个具有相同签名的工厂方法。 工厂方法不必创建新的对象。他们可以返回先前创建的对象。这对于不可变对象或值对象很有用。 与构造方法不同,工厂方法可以返回其返回类型的任何子类型的对象。 现在,我正在尝试为正在学习Java和OO原理的人员解释静态工厂

  • 问题内容: 如果我正在编写用于创建对象的静态工厂方法,那么如何为该工厂类使用’@Component’批注并指示(带有一些批注)创建该类bean所应使用的静态工厂方法?以下是我的意思的伪代码: 问题答案: 恐怕您目前无法执行此操作。但是,使用Java配置非常简单: 在这种情况下,不需要任何Spring注释。当然,您可以改用优质的XML。

  • Okie正在Spring 3.1.4上运行一些第三方代码,我无法更改。代码还使用在运行时动态注入类型。这种类型属于原型范围。所有这些都是基于服务对象创建的

  • 我是新泉。在Bean标记中,我发现了factory-method和factory-method和factory-bean之间有什么区别? 我正在使用factory-method调用我的getInstance静态方法来创建singleton对象。 工厂豆是用来做什么的? 对于给定的答复,我所理解的是 Factory-method用于调用静态方法在同一个bean类中创建对象。 Factory-bean

  • 我开始使用spring,我正在尝试使用Security、Hibernate和ThymLeaf构建一个应用程序。 我犯了一个让我困了好几天的错误。 以下是日志: application.java WebSecurityConfig.java 我的UserController spring.properties: DatabaseConfig.java 和MvcConfig: 下面是我的项目结构: 如