Spring设置注入初始化时间



我想看看setter注入在Spring中什么时候真正发生,并为此调试了代码。似乎构造函数和setter注入都发生在执行第一行时。我想知道,将要注入依赖项的服务是否会注意到这一差异?据我所知,不会吧?如果不是,那么区别在哪里呢?

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

构造函数和setter注入之间有几个区别。

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

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

  3. 当必须创建bean时,使用构造函数注入将创建它的所有依赖项。

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

更多信息:

  • Spring框架中Setter注入与Constructor注入的区别

相关内容

  • 没有找到相关文章

最新更新