在Spring中延迟依赖注入

时间:2020-05-10 03:12:40

标签: spring jpa

我正在编写一个与一个数据库对话,获取其他数据库的凭据并连接到其他数据库的应用程序。它使用运行时构造的DataSource和EntityManagerFactory进行此操作。

如果我想使用Spring数据存储库,我想我需要自动装配它们,因此它们必须是Spring Bean。

如果在对第一个数据库运行查询之前没有构造的DataSource,如何使用Spring Data?

1 个答案:

答案 0 :(得分:0)

我相信有条件的Bean创建就是您的答案。检查here

此外,在确保满足条件之后,还必须获取Bean。检查here

@Component
public class RuntimeBeanBuilder {

    @Autowired
    private ApplicationContext applicationContext;

    public MyObject load(String beanName, MyObject myObject) {
        ConfigurableApplicationContext configContext = (ConfigurableApplicationContext) applicationContext;
        SingletonBeanRegistry beanRegistry = configContext.getBeanFactory();

        if (beanRegistry.containsSingleton(beanName)) {
            return beanRegistry.getSingleton(beanName);
        } else {
            beanRegistry.registerSingleton(beanName, myObject);

            return beanRegistry.getSingleton(beanName);
        }
    }
}


@Service
public MyService{

   //inject your builder and create or load beans
   @Autowired
   private RuntimeBeanBuilder builder;

   //do something
}

因此,为您的Spring Data Repository定义一个bean,并设置获取其他数据库凭证时要满足的条件。 然后,在您的服务中使用RuntimeBeanBuilder重新加载Bean将使您获得Bean,因为现在已经满足了它的条件。