java - 使许多 bean 依赖于一个 bean 的简单方法

标签 java spring

使用数据库迁移时,我显然不希望在运行迁移之前所有 DAO 都可用。

目前我正在声明 很多 DAO,它们都具有 depends-on=databaseMigrator 属性。我觉得这很麻烦,尤其是因为它容易出错。

有没有更紧凑的方法来做到这一点?


注意事项:

最佳答案

您可以尝试编写一个实现 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/

相关文章:

java - 手动插入jar后是否需要添加pom.xml文件

java - "classpath*"在 Spring MVC 项目中声明在哪里?

java - Spring Security 按用户进行身份验证

java - 在 Spring MVC 应用程序中使用 CXF 创建 SOAP 客户端时出错

spring - OpenId 属性交换对 yahoo 不起作用?

Java 线程,join() 花费太长时间?

java - Java 中的 MVVM 模式

java - MySQL - Java - 如何从多个查询中检索结果

java - 存储用户数据 Java Swing

java - 如何在 Android 中制作一个游戏每毫秒执行一次的方法?