可能有点陈年老调了,但还是不解.
我有两个实现类
一个A
一个B
在spring配置中生成Bean现在是A需要用到b中方法,B又需要A中方法.如果两个bean互相注入,则报初始化错误。若其中一个不注入,在调用时引用,则此类重复初始化 也 报错。
请问各路神仙,有没有遇到这样的问题,如何解决
我有两个实现类
一个A
一个B
在spring配置中生成Bean现在是A需要用到b中方法,B又需要A中方法.如果两个bean互相注入,则报初始化错误。若其中一个不注入,在调用时引用,则此类重复初始化 也 报错。
请问各路神仙,有没有遇到这样的问题,如何解决
然后在c类的方法中完成你的A,B相互调用
给个例子
<bean id="studentService" class="org.ssh2.service.StudentService">
<property name="classesDao">
<ref bean="ClassesDAO" />
</property>
<property name="studentDao">
<ref bean="StudentDAO" />
</property>
</bean>
这调用里面也包含他们两个的相互引用.
比如 D类要用到A类的方法A.getF()
而着getF()中有对B的使用.
恕我愚钝,我还是不太理解1楼的方法
是sutrus直接调用的dao层。。
恶心啊!所以我只有在dao层下功夫了
下 看看有没有高手。。我是服了。。
知道Spring的原理就不要这么搞不出错才怪。。
但是要是用到aop。。
就会发现惰性加载,以及内部set对另外一个类的使用是不行的。解决了很多问题的”锁“在这里是个大顽疾。
6楼 不是我们非要这么搞,即使是普通情况。相互调用也是很正常的啊。
其实在这一层面上再往上摞一层应用也是可以解决。但就是想大家费下心,研究一下,如何才能解决。
Spring 在完全初始化 A 对象的过程中需要 B 对象,则 Spring 又去完全初始化 B 对象,而完全初始化 B 对象的过程中又需要 A 对象,这样在两个对象完全初始化完成之前,他们都无法完成注入; (惰性加载就不需要完全初始化了)即使用 AOP 又使用惰性加载的情况还没有遇到过 - -||
觉得可以借鉴 1 楼的方法, 使用一个 C 类, 其继承 A 与 B 中的任何一个即可, 例如 C 继承 A,
那么注入的时候 将 C 注入 B , B 注入 A, 这样就会解决循环注入的问题(C 不需要注入);
鉴于架构的分层次思想,将矛盾弱化成对上层的注入关系可以解决。
"->"为注入
A->B
B->A
出现循环注入A->B
C extends B
C->A
不出现循环注入。如此,在A,B,C实例化的时候都没有强依赖了。