Mar*_*cel 9 spring dependencies autowired
我有一个带弹簧配置文件的Web应用程序.我有以下条目:
<bean id="flyway" class="xxx.FlywayTool" init-method="migrateOrFail"/>
Run Code Online (Sandbox Code Playgroud)
"flyway"bean用于初始化和迁移数据库.现在我有另一个bean定义应用程序应该使用的数据源:
<bean id="dataSource" class="..." depends-on="flyway">
Run Code Online (Sandbox Code Playgroud)
这个取决于飞路取得成功.
一切都很好.现在,当"flyway"bean引发异常时,spring的引导停止并且webapp启动完成 - 一切都很好.
现在我开始通过以下方式为某些组件启用自动装配:
<context:component-scan base-package="de.xxxxx.xxxxx" />
Run Code Online (Sandbox Code Playgroud)
在某些类中,我依赖于服务,这些服务在xml配置中也被定义为bean.他们依赖于上面提到的数据源.
现在的问题是:一旦我现在引导应用程序并且"flyway"抛出一个异常,弹出就会在下一节中吞下异常:
org.springframework.beans.factory.support.AbstractBeanFactory.getTypeForFactoryBean(String,RootBeanDefinition)
catch (BeanCreationException ex) {
// Can only happen when getting a FactoryBean.
if (logger.isDebugEnabled()) {
logger.debug("Ignoring bean creation exception on FactoryBean type check: " + ex);
}
onSuppressedException(ex);
return null;
}
Run Code Online (Sandbox Code Playgroud)
现在是春天尝试,对于其他所有dependend服务(取决于数据源,因此flyway)初始化所有bean,这反过来导致相同的过程一次又一次.
这个特殊的循环一直持续到春天结束,试图在第一个飞路错误之后实现每个可能的依赖,而不是中止.
这种奇怪的行为只有在我启用组件扫描时才会启动
<context:component-scan ....
Run Code Online (Sandbox Code Playgroud)
当此功能被禁用时,弹簧在第一个飞路错误发生后停止.它也最终出现在另一个类中:
org.springframework.context.support.AbstractApplicationContext.refresh()
catch (BeansException ex) {
// Destroy already created singletons to avoid dangling resources.
destroyBeans();
// Reset 'active' flag.
cancelRefresh(ex);
// Propagate exception to caller.
throw ex;
}
Run Code Online (Sandbox Code Playgroud)
所以这也是我在其他情况下所期望的行为.
我们的春季版:3.0.6.RELEASE
这种行为也存在于其他类中抛出任何运行时执行(不仅仅是flyway)这是一个错误还是预期的行为?
任何帮助高度赞赏
烫发
正如nico_ekito在评论中所说,放在<context:component-scan...XML 文件中的 beans 声明之后。
确认上班:
马塞尔:哇,这似乎有效。你认为我应该打开一个错误吗?或者这是有意的行为?
| 归档时间: |
|
| 查看次数: |
3511 次 |
| 最近记录: |