java - spring bean 的生命周期是什么?

标签 java spring lifecycle

我对 Spring 的生命周期感到困惑。

XmlBeanFactory beanFactory 
= new XmlBeanFactory(new ClassPathResource("SpringHelloWorld.xml"));

上面的代码片段是否创建了对象?

如果上面的答案是真的。

a) 然后,对于作用域为“单例”的 bean,获取在上述代码片段中创建的对象。我是对还是错?

b) 对于范围为“原型(prototype)”的情况,创建的对象是否未被使用。因为,容器总是返回新对象。

XmlBeanFactory beanFactory 
= new XmlBeanFactory(new ClassPathResource("SpringHelloWorld.xml"));

上面的代码片段是否创建了对象?

如果答案是假的,

spring框架如何验证bean定义是否正确。

来自亨利的回答

通常,单例 bean 是在上下文启动时创建的。这可以通过lazy-init 或default-lazy-init 属性进行更改。

仅在需要时创建原型(prototype) bean。

仅在语法上,实例化 bean 时可能仍然存在错误,例如,如果未提供必需的属性。

最佳答案

BeanFactory 不像 ApplicationContext 那样在启动时预先实例化单例。因此,即使您的 bean 是非惰性和单例的,它也不会被创建。

prototype bean 是按需创建的,每次您请求原型(prototype) bean 时,您都会得到一个新实例。但是一旦在 Autowiring 过程中使用了这样的 bean,同一个实例将永远被使用。

使用 ApplicationContext 所有的单例都被急切地创建,原型(prototype) bean 只在需要时。

另见

关于java - spring bean 的生命周期是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13988720/

相关文章:

java - Spring Mvc 测试 webapp @Autowired 注释不起作用

android - 如何测试 Activity 的 onDestroy 方法

ios - viewWillLayoutSubviews 在 applicationDidEnterBackground 通知后被调用

java - 如何在java中标记输入文件

java - 不同类型的键值数据库之间的区别

java - Liquibase + H2 + Junit 主键序列重新开始

java - spring mvc 跟踪引荐页面

ios 模拟器 viewDidLoad,viewDidAppear 在关闭或退出后未调用

java - 通过 activeMQ 网络转发消息时出现问题

java - 无法在 macOs 上启动 Jenkins - Java 10