精华帖 (0) :: 良好帖 (1) :: 新手帖 (5) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-02
一般是选择SETTER方式注入,构造方法注入会有死循环的问题
|
|
返回顶楼 | |
发表时间:2012-04-02
用setter 其实很容易想通,其实就是两个类一个需要另外一个,而构造函数就费劲了,说明互相需求竞争,无法没有对方,互相\无法构造,如果是这种设计,说明设计上也存在问题!!!
|
|
返回顶楼 | |
发表时间:2012-04-03
如果你必须用循环植入,说明你的设计可能有些问题,可以看看这个哥们的这篇blog
http://misko.hevery.com/2008/08/01/circular-dependency-in-constructors-and-dependency-injection/ |
|
返回顶楼 | |
发表时间:2012-04-03
哪位大牛能提供一个spring-reference的下载地址呢?
|
|
返回顶楼 | |
发表时间:2012-04-03
出现循环依赖是觉得的设计问题。
|
|
返回顶楼 | |
发表时间: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(聚合) |
|
返回顶楼 | |
发表时间: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架构的机制 |
|
返回顶楼 | |
发表时间: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” |
|
返回顶楼 | |
发表时间:2012-04-05
这样写不太好,面对不同的应用服务器可能会报错。
|
|
返回顶楼 | |
发表时间:2012-04-05
spring文档里有说明
|
|
返回顶楼 | |