Spring Context中bean之间的条件依赖

时间:2016-05-06 04:41:58

标签: spring

在我的Spring应用程序上下文中,我有DynamicSessionFactoryInitBean,它总是在应用程序上下文中需要,因为它负责数据源的动态bean定义和hibernate会话工厂中所有注册的数据库(相同的模式,多个数据库)系统。还有另一个bean LiquibaseInitBean仅在配置文件开发处于活动状态时才会出现,并负责对系统中注册的每个数据库应用Liquibase数据库升级。

DynamicSessionFactoryInitBean依赖LiquibaseInitBean每当存在,意味着开发资料处于活动状态时),以便DynamicSessionFactoryInitBean始终可以看到<beans> <!-- other beans.... --> <bean id="dynamicSessionFactoryInitBean" class="my.app.DynamicSessionFactoryInitBean" /> <beans profile="development"> <bean id="liquibaseInitBean" class="my.app.liquibase.LiquibaseInitBean" /> </beans> <beans> 会很高兴最新的数据库架构。

depends-on="liquibaseInitBean"

在开发配置文件未激活时,简单地为DynamicSessionFactoryInitBean定义添加{{1}}属性显然会导致问题(未定义bean命名为&#39; LiquibaseInitBean&#39;)。是否有条件取决于&#34;或者&#34;取决于是否存在&#34;在春天的类型设施?

1 个答案:

答案 0 :(得分:1)

在两个配置文件中定义dynamicSessionFactoryInitBean的默认配置文件和开发配置文件。使dynamicSessionFactoryInitBean仅在开发配置文件中依赖于liquibaseInitBean,如下所示

<beans>
   <!-- other beans.... -->
   <beans profile="default">
      <bean id="dynamicSessionFactoryInitBean" class="my.app.DynamicSessionFactoryInitBean"  />
   </beans>

   <beans profile="development">
      <bean id="liquibaseInitBean" class="my.app.liquibase.LiquibaseInitBean" />
      <bean id="dynamicSessionFactoryInitBean" class="my.app.DynamicSessionFactoryInitBean" depends-on="liquibaseInitBean" />
   </beans>
<beans>

NB。当没有激活​​其他配置文件时,始终激活默认配置文件