论坛首页 Java企业应用论坛

关于Spring xml中如何配置A类注入B类,同时B类注入到A类的探讨

浏览 9220 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (5) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-02  
一般是选择SETTER方式注入,构造方法注入会有死循环的问题
0 请登录后投票
   发表时间:2012-04-02  
用setter 其实很容易想通,其实就是两个类一个需要另外一个,而构造函数就费劲了,说明互相需求竞争,无法没有对方,互相\无法构造,如果是这种设计,说明设计上也存在问题!!!
0 请登录后投票
   发表时间:2012-04-03  
如果你必须用循环植入,说明你的设计可能有些问题,可以看看这个哥们的这篇blog

http://misko.hevery.com/2008/08/01/circular-dependency-in-constructors-and-dependency-injection/
0 请登录后投票
   发表时间:2012-04-03  
哪位大牛能提供一个spring-reference的下载地址呢?  
0 请登录后投票
   发表时间:2012-04-03  
出现循环依赖是觉得的设计问题。
0 请登录后投票
   发表时间:2012-04-03  
chaooo 写道
如果你必须用循环植入,说明你的设计可能有些问题,可以看看这个哥们的这篇blog

http://misko.hevery.com/2008/08/01/circular-dependency-in-constructors-and-dependency-injection/



明显的逻辑,A调用B,B调用A,
那么,必定可以重构成仅有A调用B(调整依赖性),或者A和B统一调用C(抽象共性),再或者只有C调用A和B(聚合)
0 请登录后投票
   发表时间:2012-04-04  
ecustz 写道
jinnianshilongnian 写道
ecustz 写道
jinnianshilongnian 写道
这是循环依赖的问题,请参考我的这篇博文 【第三章】 DI 之 3.2 循环依赖 ——跟我学spring3

# package cn.javass.spring.chapter3.bean; 
# public class CircleA { 
#     private CircleB circleB; 
#     public CircleA() { 
#     } 
#     public CircleA(CircleB circleB) { 
#         this.circleB = circleB; 
#     } 
# public void setCircleB(CircleB circleB)  
# { 
#         this.circleB = circleB; 
#     } 
# public void a() { 
#    circleB.b(); 
# } 
# }


# package cn.javass.spring.chapter3.bean; 
# public class CircleB { 
#     private CircleA circleA; 
#     public CircleB() { 
#     } 
#     public CircleB(CircleA circleA) { 
#         this.circleA = circleA; 
#     } 
# public void setCircleA(CircleA circleA)  
# { 
#         this.circleA = circleA; 
#     } 
#     public void b() { 
#         circleA.a(); 
#     } 
# }

配置如下:
# <bean id="circleA" class="cn.javass.spring.chapter3.bean.CircleA" scope="singleton"> 
#         <property name="circleB" ref="circleB"/> 
#    </bean> 
#    <bean id="circleB" class="cn.javass.spring.chapter3.bean.CircleB" scope="singleton"> 
#        <property name="circleA" ref="circleA"/> 
#    </bean> 

这样配应该不会抛beancurrentlyincreationexception


会抛循环依赖, 你试一下

对于setter注入造成的依赖是通过Spring容器提前暴露刚完成构造器注入但未完成其他步骤(如setter注入)的Bean来完成的,而且只能解决单例作用域的Bean循环依赖。

不是通过这种方式解决了吗??

求解!!!!


会不会是想问双向注入的问题,类似于seam架构的机制
0 请登录后投票
   发表时间:2012-04-05  
kimmking 写道
chaooo 写道
如果你必须用循环植入,说明你的设计可能有些问题,可以看看这个哥们的这篇blog

http://misko.hevery.com/2008/08/01/circular-dependency-in-constructors-and-dependency-injection/



明显的逻辑,A调用B,B调用A,
那么,必定可以重构成仅有A调用B(调整依赖性),或者A和B统一调用C(抽象共性),再或者只有C调用A和B(聚合)

这才是合理设计,我喜欢这样“C调用A和B”
0 请登录后投票
   发表时间:2012-04-05  
这样写不太好,面对不同的应用服务器可能会报错。
0 请登录后投票
   发表时间:2012-04-05  
spring文档里有说明
  • 大小: 17.7 KB
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics