【发布时间】:2021-01-08 18:22:57
【问题描述】:
如果您在项目中定义了具有单例范围的组件类,并且在您的 main() 中除了调出应用程序上下文之外什么都不做,例如:
ConfigurableApplicationContext context = SpringBootApplication.run(MyMainClass.class, args)
context 将已经指向包含这些类的单例实例的ApplicationContext。因此,无论您输入多少次context.getBean(MyContainerClass.class),您都会得到相同的MyContainerClass 实例。
但是该对象的创建可能非常繁重,甚至依赖于运行时约束(数据库连接、网络套接字管理、工作)。我知道重载构造函数不是很好的编程习惯,但是,即使在 POJO 中,它也可能发生。
我想知道是否有一种特殊的逻辑可以在创建上下文时立即创建单例,而不是第一次调用 getBean()。也许 SpringBoot 给程序员的合同说:“如果你用 @Component 注释了一个类,你真的应该在某个时候检索 bean:我假设你知道这一点并且愿意在正在提出上下文。”也许不吧。不确定。
【问题讨论】:
-
嗨@Jason,这就是您要搜索的内容吗? docs.spring.io/spring-framework/docs/current/…spring.io/blog/2019/03/14/…
-
100%。谢谢。
-
那是因为 Spring 就是这样设计的。一些系统,比如 Micronaut,默认是惰性的。这是一种选择。
标签: java spring-boot inversion-of-control applicationcontext spring-bean