java使用Spring注释为每个枚举值创建一个bean
是否有一种优雅的方法来创建相同类型的多个bean实例,每个实例都根据一个枚举值进行参数化?例如:
//MyEnum.java
enum MyEnum
{
VALUE1,
VALUE2;
}
//MyClass.java
class MyClass
{
MyClass(MyEnum myEnum){ ... }
}
//Context.java
@Configuration
class Configuration
{
@Bean
public MyClass myClass1()
{
return new MyClass(MyEnum.VALUE1);
}
@Bean
public MyClass myClass2()
{
return new MyClass(MyEnum.VALUE2);
}
}
有没有比为每个枚举值显式创建新bean更好的方法?请注意,bean的名称实际上并不重要,因为稍后我将使用getBeanNamesForType(MyClass.class)从它们中进行搜索
# 1 楼答案
最简单的方法是返回一个
List<MyEnum>
:您不能使用
@Autowired
进行注入,但是@Resource
只要您按名称注入即可工作(有关这方面的更多信息,请参阅Spring Reference):显然,您可以对任何bean列表使用相同的方法
# 2 楼答案
我讨厌回答我自己的问题。我能够使用DefaultListableBeanFactory实现我想要的