簡體   English   中英

@ConditionalOnBean 不適用於手動注冊的 bean

[英]@ConditionalOnBean does not work with manually registered bean

我有這樣的問題。 在數據庫配置的基礎上,我需要創建適當的 bean 來處理整個過程。 我發現我會嘗試按照以下方式進行。 首先,在 db config 的基礎上創建標記 bean。

@Configuration
class Dbconfig {
  @Autowired DbRepo dbRepo;
  @Autowired GenericApplicationContext applicationContext;
  @PostConstruct
  public void init(){
    Config config = dbRepo.findConfiguration();
    if(config.value.equals("test")){
      applicationContext.registerBean("testBean", TestBean.class, TestBean::new);
    }else{ //other steps
  }
}

然后,在這個標記 bean 的基礎上,我將創建適當的標記 bean,例如:

@Configuration
@ConditionalOnBean(name = "testBean")
@AutoConfigureAfter(value = Dbconfig.class)
public class ObjConfig{
//creating proper @Beans
  }

但是,不幸的是,它不起作用。 不知道為什么spring好像沒有看到這個“testBean”。 盡管如此,我已經調試了它,我可以看到這個 bean 存在於應用程序上下文的 BeanFactory 中。 配合@DependsOn注解也很順利,然后spring就可以看到這個bean了。 對於如何以其他方式解決問題的任何幫助或建議,我將不勝感激。

@AutoConfigureAfter僅適用於自動配置類,不適用於手動配置的 bean。 如果您將 testBean 作為Autowired bean 連接,您的代碼將起作用。 您可以嘗試@ConditionalOnExpression基於SpEL表達式注入 bean。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM