簡體   English   中英

Spring 配置文件注釋多個bean

[英]Spring profile annotation multiple beans

假設我有一個圖書館(我不能改變它)。 有一個 class 消費者使用 class A 的 spring 組件。

@Component
public class Consumer{
   @Autowired
   private A a;
}

在我的配置 class 中,我想根據配置文件定義兩個相同 class A 的 bean。

@Configuration
public class Config {
    
    @Bean
    @Profile("!dev")
    A a1(){
        return new A();
    }
    
    @Bean
    @Profile("dev")
    A a2(){
        return new A();
    }
}

但是當我啟動應用程序時,我得到下一個異常

sample.Consumer 中構造函數的參數 1 需要單個 bean,但找到了 2 個:

我不知道如何解決這個問題。 我嘗試使用配置文件注釋和單個 bean 為它創建 2 個單獨的配置,但它也沒有工作。 標記一個 bean @Primary 也無濟於事。

你們知道如何解決嗎? 謝謝!

UPD。

讓我說得更具體一些。 class 是 dynamodb spring 啟動器的一部分。 消費者 - DynamoDBMapperFactory。 我的 bean - DynamoDBMapperConfig。 所以我想在我的應用程序中有 2 個版本的 DynamoDBMapperConfig。

您需要停止掃描Consumer聲明的 package。

如果將@Profile應用於@Bean注釋方法,則其行為會有所不同。

來自個人資料文檔。

如果您想定義具有不同配置文件條件的替代 bean,請使用指向相同 bean 名稱的不同 Java 方法名稱

這意味着,您應該這樣做:

@Configuration
public class Config {
    
    @Bean("a")
    @Profile("!dev")
    A a1(){
        return new A();
    }
    
    @Bean("a")
    @Profile("dev")
    A a2(){
        return new A();
    }
}

注意相同的 bean 名稱。

暫無
暫無

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

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