可能有点陈年老调了,但还是不解.
我有两个实现类
一个A
一个B
在spring配置中生成Bean现在是A需要用到b中方法,B又需要A中方法.如果两个bean互相注入,则报初始化错误。若其中一个不注入,在调用时引用,则此类重复初始化 也 报错。
请问各路神仙,有没有遇到这样的问题,如何解决

解决方案 »

  1.   

    写个C类注入 A,B
    然后在c类的方法中完成你的A,B相互调用
      

  2.   

    放到service层,service层调用dao层代码。这样就避免a,b互相调用了
      

  3.   

    比如说2个DAO类   写一个service  
    给个例子
    <bean id="studentService" class="org.ssh2.service.StudentService">
    <property name="classesDao">
    <ref bean="ClassesDAO" />
    </property>
    <property name="studentDao">
    <ref bean="StudentDAO" />
    </property>
    </bean>
      

  4.   

    关键是A,B 两类有公布给其他类的调用.
    这调用里面也包含他们两个的相互引用.
    比如 D类要用到A类的方法A.getF()
    而着getF()中有对B的使用.
    恕我愚钝,我还是不太理解1楼的方法
      

  5.   

    谢谢2,3楼的兄弟们。俺们这程序已经定型了。
    是sutrus直接调用的dao层。。
    恶心啊!所以我只有在dao层下功夫了
      

  6.   

    牛人。
    下 看看有没有高手。。我是服了。。
    知道Spring的原理就不要这么搞不出错才怪。。
      

  7.   

    其实简单构架利用spring惰性加载机制是可以实现循环注入的。
    但是要是用到aop。。
    就会发现惰性加载,以及内部set对另外一个类的使用是不行的。解决了很多问题的”锁“在这里是个大顽疾。
    6楼 不是我们非要这么搞,即使是普通情况。相互调用也是很正常的啊。
    其实在这一层面上再往上摞一层应用也是可以解决。但就是想大家费下心,研究一下,如何才能解决。
      

  8.   

    确实, 循环注入很无语的....
     Spring 在完全初始化 A 对象的过程中需要 B 对象,则 Spring 又去完全初始化 B 对象,而完全初始化 B 对象的过程中又需要 A 对象,这样在两个对象完全初始化完成之前,他们都无法完成注入; (惰性加载就不需要完全初始化了)即使用 AOP 又使用惰性加载的情况还没有遇到过 - -||
      
    觉得可以借鉴 1 楼的方法, 使用一个 C 类, 其继承 A 与 B 中的任何一个即可, 例如 C 继承 A, 
    那么注入的时候  将 C 注入 B , B 注入 A, 这样就会解决循环注入的问题(C 不需要注入);
      

  9.   

    也就是说,直接去解决循环注入是不太可能的。
    鉴于架构的分层次思想,将矛盾弱化成对上层的注入关系可以解决。
    "->"为注入
    A->B
    B->A
    出现循环注入A->B
    C extends B
    C->A
    不出现循环注入。如此,在A,B,C实例化的时候都没有强依赖了。