我有以下情况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。