gpt4 book ai didi

java - Spring设置注入(inject)初始化时间

转载 作者:行者123 更新时间:2023-12-02 06:30:48 25 4
gpt4 key购买 nike

我想看看 Spring 中何时真正发生 setter 注入(inject),并为此调试了我的代码。看起来构造函数和 setter 注入(inject)都是在第一行执行时发生的。我想知道,将要注入(inject)该依赖项的服务是否会注意到其中的差异?按照我的理解,不会吧?如果不是,那么区别在哪里呢?

   ApplicationContext context = new ClassPathXmlApplicationContext("spring-module.xml");        
//Both setting and constructor dependencies are initialized at this point.
CampaignManager cm = (CampaignManager) context.getBean("campaignManager");

最佳答案

构造函数和 setter 注入(inject)之间存在一些差异。

  1. Setter 注入(inject)不能确保在创建对象时发生注入(inject)。您不能保证一定的注入(inject)已经发生,例如可能存在一个具有不完整依赖关系的对象,构造函数注入(inject)不允许在创建其依赖关系之前创建对象。

  2. 如果两个 Bean 之间存在循环依赖关系(例如,A 依赖于 B,而 B 依赖于 A) 当使用构造函数注入(inject)时,Spring 将抛出一个 ObjectCurrentlyInCreationException ,而当使用 setter 注入(inject)时,Spring 将在调用 setter 方法之前创建这两个 bean。

  3. 当必须创建 Bean 及其所有依赖项时,请使用构造函数注入(inject)。

  4. 当依赖项数量巨大时,使用setter注入(inject)。

更多信息:

关于java - Spring设置注入(inject)初始化时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com