微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Bean 依赖于非 Spring 类的初始化

如何解决Spring Bean 依赖于非 Spring 类的初始化

假设我有一些名为 SomeClassConfig 的 Java 类,我想在其中定义如下所示的依赖项注入;

@Configuration
public class SomeClass {

    @Bean
    SomeOtherClass someOtherClass() {
        FactoryClass factory = UtilFactoryClass.getDefaultFactory();
        return factory.create();
    }
}

这里UtilFactoryClass表示一些库,它允许我创建一个工厂类,这反过来又允许我创建我感兴趣的对象的实例。我的问题是上面提到的认工厂被初始化一段时间后,所以我希望在实例化FactoryClass 实例后实例化/注入 bean。这可能吗? UtilFactoryClass 对 Spring Boot 框架一无所知,我尝试应用 @DependsOn 注解,但意识到它只允许我依赖其他 Bean。 我尝试应用的具体“getDefaultFactory”方法如下:Link。它与名为 Keycloak 的库相关联。我的问题是,从这个方法获得的工厂在应用程序生命周期的某个点之前都是空的。

解决方法

你的意思是:

@Configuration
public class SomeClass {

  @Bean
  SomeOtherClass someOtherClass() { //argument injection also possible
    return factory().create();
  }

  @Bean
  FactoryClass factory() {
    //check/wait for condition e.g.:
    while (!UtilityFactory.isInitialized()) { 
      try {
        Thread.sleep(1000); 
        // better: TimeUnit.XXX.sleep(),and even better use an (spring managed) executor
      } catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
      }
    }
    return UtilFactoryClass.getDefaultFactory();
  }
}

“让spring管理工厂”!? ;)

有关检查/等待部分,请参阅:https://www.baeldung.com/java-delay-code-execution

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。