解决Spring中singleton的Bean依赖于prototype的Bean的问题

Posted 平林新袖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决Spring中singleton的Bean依赖于prototype的Bean的问题相关的知识,希望对你有一定的参考价值。

在spring bean的配置的时候,可能会出现一个singleton的bean依赖一个prototype的bean。因为singleton的bean只有一次初始化的机会,所以他们的依赖关系页只有在初始化的时候被设置,在这个时候同样会初始化一个prototype的bean,这样就会导致本来是prototype的bean成了singleton了,这种矛盾的解决方案有两个:

  1.放弃使用依赖注入,在需要的时候主动向容器申请。

  2.利用方法注入

 第一种方法显然是不合理的~~~

方法注入通常使用lookup方法,可以让spring容器重写容器中bean的抽象或具体的方法,返回该bean。

具体实现方式:  

  Person 定义为singleton,依赖的Address定义为prototype

技术分享


首先在Person中定义一个抽象方法,例如 public abstract Address getAddress(); 当然这个方法的名字可以自定义,该方法不用去实现。相应的该类Person也会变成abstract。

在beans.xml中的配置:

技术分享

注:bean默认的scope是singleton,所以上面省略了配置。

  <lookup-method>

    name :指定要lookup的方法,就是上面自定的方法

    bean:关联要生成的bean.

这样以来就解决了不同作用域bean的依赖出现的矛盾问题。

以上是关于解决Spring中singleton的Bean依赖于prototype的Bean的问题的主要内容,如果未能解决你的问题,请参考以下文章

Spring中的Bean

死磕 Spring----- IOC 之parentBeanFactory 与依赖处理

Spring中Bean的管理问题

Spring Bean注入/单例理解/循环依赖

说说 Spring Bean 的作用域

spring总结之二(Bean作用域依赖注入)