Java Spring何时创建注入对象的实例
Spring执行DI并创建对象,这样您的程序就不必担心创建对象了。Java Spring何时创建注入对象的实例,java,spring,dependency-injection,Java,Spring,Dependency Injection,Spring执行DI并创建对象,这样您的程序就不必担心创建对象了。 但这里的问题是何时创建注入对象的实例。是在主程序使用实例时,还是在创建主程序实例时 当上下文启动时,上下文中的所有bean都被实例化、注入和初始化。当从上下文中检索到第一个bean时,所有bean都可以使用了 有两件事可以防止在上下文启动时初始化bean: bean使用scope=“xyz”属性配置了bean(例如prototype、request或session) 一个bean被标记为,在这种情况下,只有当它被显式地请求时,
但这里的问题是何时创建注入对象的实例。是在主程序使用实例时,还是在创建主程序实例时 当上下文启动时,上下文中的所有bean都被实例化、注入和初始化。当从上下文中检索到第一个bean时,所有bean都可以使用了 有两件事可以防止在上下文启动时初始化bean:
- bean使用
属性配置了bean(例如scope=“xyz”
、prototype
或request
)session
- 一个bean被标记为,在这种情况下,只有当它被显式地请求时,或者如果它作为某个其他bean的依赖项是必需的,它才会被实例化
OP在评论中写道: 因此,由程序员决定bean是需要延迟初始化还是需要提前初始化。这可能是非常主观的,但您能告诉我在这种情况下遵循的最佳实践吗 是的,由程序员(或系统集成商)决定 实际上没有任何“最佳实践”规则来决定。这样想:
- 如果在始终需要实例化bean时将其声明为延迟初始化,则可能会使启动过程变慢
- 如果您在并不总是需要的时候声明一个bean是急切地初始化的,那么您将使启动过程变慢,并可能使用更多内存。在最坏的情况下,创建不必要的bean甚至可能导致启动失败
简而言之,您需要了解您的申请。谢谢skaffman,这澄清了我的疑问。因此,由程序员决定bean是需要延迟初始化还是需要提前初始化。这可能是非常主观的,但是你能告诉我在这种情况下遵循的最佳实践吗?这完全是主观的,是的,但是软件构建的其余部分也是如此。这也不例外。但是您的默认位置应该是非惰性的,并且是默认范围。除非你有很好的理由,否则你只能做出一个豆子。我认为你可以(也应该)客观地做出这个决定。。。就像软件工程中的许多其他事情一样。我们往往没有足够的信息或脑力来做出客观的决定,这只是一个重大的决定。自从上一篇文章发表以来已经三年多了,我只是在寻找类似的问题时跳了出来。我的一个查询是,在上下文实例化时,它将只创建一个bean对象(如果我错了,请纠正我)。如果我在代码中自动连接同一个bean两次,第二个对象会被惰性地疯狂化吗?