使用数据库迁移时,我显然不希望在运行迁移之前所有 DAO 都可用。
目前我正在声明 很多 DAO,它们都具有 depends-on=databaseMigrator
属性。我觉得这很麻烦,尤其是因为它容易出错。
有没有更紧凑的方法来做到这一点?
注意事项:
- the depends-on attribute is not 'inherited' from parent beans ;
- 我没有使用 Hibernate 或 JPA,所以我无法使 sessionFactory bean
依赖于
迁移器。
最佳答案
您可以尝试编写一个实现 BeanFactoryPostProcessor 的类自动为您注册依赖项的接口(interface):
警告:这个类还没有被编译。
public class DatabaseMigratorDependencyResolver implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
String[] beanNames = beanFactory.getBeanDefinitionNames();
for (String beanName : beanNames) {
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
// Your job is here:
// Feel free to make use of the methods available from the BeanDefinition class (http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/beans/factory/config/BeanDefinition.html)
boolean isDependentOnDatabaseMigrator = ...;
if (isDependentOnDatabaseMigrator) {
beanFactory.registerDependentBean("databaseMigrator", beanName);
}
}
}
}
然后您可以将此类的一个 bean 与所有其他 bean 一起包括在内。
<bean class="DatabaseMigratorDependencyResolver"/>
Spring 会在开始启动其余 bean 之前自动运行它。
关于java - 使许多 bean 依赖于一个 bean 的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/959547/