如何控制Spring bean的创建顺序?

时间:2016-03-05 04:52:15

标签: java spring

我正在使用PARTLY迁移到春天的一些第三方罐子。痛点在于有很多初始化模块可以迁移到spring。初始化模块需要在批量创建bean之前首先执行。

我也读过Spring 3 bean instantiation sequence,这里的问题是,第三部分库使用@Component来创建bean(这取决于未迁移到spring的初始化模块,有线连接......?)。

现在我可以编写一个spring bean来包装所有初始化模块。并在需要它的bean之前创建bean。

那么有没有办法指定bean创建序列来首先创建初始化bean?

另外我检查了一些文档,spring bean创建在单线程中,所以这可以工作。

2 个答案:

答案 0 :(得分:1)

您可以使用BeanPostProcessor并将您的initizaling模块添加为依赖项

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

<bean class="com.foo.CustomBeanPostProcessor" depends-on="com.foo.InitModuleBean"/>
<bean class="com.foo.BarBean" />
<bean id="com.foo.InitModuleBean" class="com.foo.InitModuleBean" />
</beans>

答案 1 :(得分:0)

你将初始化的wraperBean作为xmlConfig文件中的第一个Bean,然后spring将通过初始化Wraper来处理初始化另一个解决方案是将depends-on属性添加到依赖于该Wrapper和你的所有bean中在像{/ p>这样的属性depends-on中指定该包装bean的id

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="modules" class="com.mycompany.ModulesWrapper" />
<bean class="com.foo.ClientBean" depends-on="modules" />
</beans>