我正在嘗試創建一個應該根據運行時參數創建其他(原型)bean的@Configuration工廠bean。我想使用基於spring的基於java的配置,但不知何故我無法使它工作。如何使用@Bean方法根據運行時參數提供不同的bean
下面是一個例子:
enum PetType{CAT,DOG;}
abstract class Pet {
}
@Component
@Scope("prototype")
class Cat extends Pet{
}
@Component
@Scope("prototype")
class dog extends Pet{
}
@Configuration
public class PetFactory{
@Bean
@Scope("prototype")
public Pet pet(PetType type){
if(type == CAT){
return new Cat();
}else
return new Dog();
}
}
petFactory.animal(PetType.CAT);
我查春文檔和這裏要求所有相關問題,但我所創建的豆供應運行參數的情況下結束。我需要向工廠提供運行時參數,這些參數必須使用它們來創建不同的bean。
編輯: 似乎(目前)沒有辦法來定義一個參數到@Bean註解的方法如 「運行時」。 Spring假定方法參數將被用作新bean的構造器參數,因此它試圖用容器管理的bean來滿足這種依賴性。
查看配置文件。 「PetType」從哪裏來? –
PetType來自用戶輸入。 – Max
如果它來自用戶輸入,爲什麼你需要利用Spring創建它們(你正在調用新的,所以Spring不會管理它們)?讓工廠成爲一個彈簧組件,但有其他的東西驅動PetType的創建 - 可以在您的攔截器,控制器或任何地方。 – Scott