gpt4 book ai didi

java - 使用 Spring 注释为每个枚举值创建一个 bean

转载 作者:行者123 更新时间:2023-12-01 14:52:16 35 4
gpt4 key购买 nike

是否有一种优雅的方法来创建相同类型的多个 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) 来搜索它们。

最佳答案

我讨厌回答自己的问题。我能够使用 DefaultListableBeanFactory 实现我想要的目标。

@Bean
public ApplicationContextAware pseudoFactory()
{
return new ApplicationContextAware()
{
@Override
public void setApplicationContext( ApplicationContext ac )
{
GenericApplicationContext gac = (GenericApplicationContext) ac;

DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) gac.getBeanFactory();

for( EnumType enumType : EnumType.values())
{
ParameterizedClass pc = new ParameterizedClass(enumType);

String beanName = enumType.getName() + "ParameterizedClass";

beanFactory.registerSingleton(beanName, pc);
}
}
};
}

关于java - 使用 Spring 注释为每个枚举值创建一个 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14714987/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com