我正在尝试创建一个 @Configuration 工厂 bean,它应该根据运行时参数创建其他(原型)bean。我想使用基于 java 的 spring 配置,但不知何故我无法让它工作。
这是一个例子:
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);
我检查了 spring 文档和这里提出的所有相关问题,但我最终是在向创建的 bean 提供运行时参数的情况下结束的。而且我需要向必须使用它们来创建不同 bean 的工厂提供运行时参数。
编辑: 似乎(目前)没有办法将@Bean注释方法的参数定义为“运行时”。Spring 假定方法参数将用作新 bean 的构造函数参数,因此它尝试使用容器管理的 bean 来满足这种依赖关系。