Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring注释为每个枚举值创建一个bean_Java_Spring - Fatal编程技术网

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

Java 使用Spring注释为每个枚举值创建一个bean,java,spring,Java,Spring,是否有一种优雅的方法来创建相同类型的多个bean实例,每个实例都根据一个枚举值进行参数化?例如: //MyEnum.java enum MyEnum { VALUE1, VALUE2; } //MyClass.java class MyClass { MyClass(MyEnum myEnum){ ... } } //Context.java @Configuration class Configuration { @Bean public MyClass myClass1(

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

最简单的方法是返回一个
列表:


显然,您可以对任何bean列表使用相同的方法。

我讨厌回答我自己的问题。我能够使用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);
      }
    }
  };
}

我只是好奇,需要Spring管理枚举的用例是什么?枚举只是一个细节。我真正想要的是Spring实例化一个完整的bean家族,每个bean都用一组稍微不同的参数构建。一种在一个或多个参数轴上的“笛卡尔积”。
@Resource(name = "myEnums") List<MyEnum> enumValues;    
@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);
      }
    }
  };
}