[英]how to auto inject multiple beans into an ArrayList property with spring and its annotation
[英]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.