我有以下情况int“ super-context.xml”:

<bean id="conf" class="ee.Conf"/>

<bean id="service" class="ee.Serivce">
  <property name="conf" ref="conf">
</bean>


现在,我想在各种不同的项目中使用此“ super-context.xml”。说“ sub-context.xml”具有:

<import resource="super-context.xml"/>

<bean id="subConf1" class="ee.SubConf">
   <property name="confloc" value="classpath:ee/customconf1.sss" />
</bean>

<bean id="subConf2" class="ee.SubConf">
   <property name="confloc" value="classpath:ee/customconf2.sss" />
</bean>

...

<bean id="subConfn" class="ee.SubConf">
   <property name="confloc" value="classpath:ee/customconfn.sss" />
</bean>


ee.Conf如下所示:

public class Conf ... {
    ...
    public void addSubConf(Resource res) {
       //configuration resolving from res
    }
    ...
}


ee.SubConf如下所示:

public class SubConf ... {
    ...
    @Autowired
    ee.Conf superConf;
    ...
    public void setConfloc(Resource res) {
       superConf.addSubConf(res);
    }
    ...
}


有关上下文加载的问题白羊座。 Bean按照以下顺序初始化(由于上下文文件中的顺序):conf,service,subConf1,subConf2,... subConfn

但是服务bean实际上依赖于所有subConf bean(尽管不能从上下文定义本身中扣除)。在subConf bean定义之后添加“ sub-context.xml”中的导入时,加载成功。

其背后的原因是实现模块化。由于“ sub-context.xml”部分杀死了希望的模块化

还是这是实现此类模块化的更纯粹的方法?

最佳答案

我要说的是您以错误的方式解决了这个问题。 SubConf不应依赖于Conf开头。只需将SubConf对象的集合注入到Conf对象中即可。

public class Conf {

    @Autowired
    private List<SubConf> subconfs;
}


这样,您就无需使用SubConf调用Conf类,这将消除循环依赖。

有关自动装配的更多信息,请参见Spring reference guide

10-08 01:11