gpt4 book ai didi

java - 尽可能晚地初始化 Spring Bean

转载 作者:行者123 更新时间:2023-11-30 04:02:22 24 4
gpt4 key购买 nike

我在“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

但是service bean实际上依赖于所有subConf bean(尽管这不能从上下文定义本身推断出来)。当在 subConf bean 定义之后添加“sub-context.xml”中的导入时,它加载正常。

这背后的原因是实现模块化。是否可以强制 bean 尽可能晚地加载(示例中的“service”bean)或使某种类型的 bean 尽快加载(示例中的“subConf”bean),因为“中 bean 的固定顺序” sub-context.xml”部分破坏了所希望的模块化

或者是否有更纯粹的方法来实现这种类型的模块化?

最佳答案

我想说你处理这个问题的方式是错误的。 SubConf 一开始就不应该依赖于 Conf。只需将 SubConf 对象集合注入(inject)到 Conf 对象中即可。

public class Conf {

@Autowired
private List<SubConf> subconfs;
}

这样,您就不需要 SubConf 调用 Conf 类,这将消除您的循环依赖。

请参阅Spring reference guide有关 Autowiring 的更多信息。

关于java - 尽可能晚地初始化 Spring Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21675512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com