Java Spring声明多个bean

Java Spring声明多个bean,java,spring,spring-bean,Java,Spring,Spring Bean,我有一个MyObject的HashMap,我想循环并将它们中的每一个声明为bean。最后,我想选择一个特定的键作为@primary 在SpringJava配置中是否有这样做的方法 我不能在侦听器中真正做到这一点,因为当上下文加载时,这些bean是必需的。我在看工厂生产的豆子,但想不出来 感谢您的帮助 谢谢 Abhi您可以通过在一个Java配置类中获取对的引用来创建一组bean。比如说, @Configuration public class ServicesConfig { @Post

我有一个MyObject的HashMap,我想循环并将它们中的每一个声明为bean。最后,我想选择一个特定的键作为@primary

在SpringJava配置中是否有这样做的方法

我不能在侦听器中真正做到这一点,因为当上下文加载时,这些bean是必需的。我在看工厂生产的豆子,但想不出来

感谢您的帮助

谢谢
Abhi

您可以通过在一个Java配置类中获取对的引用来创建一组bean。比如说,

@Configuration
public class ServicesConfig {

    @PostConstruct
    public void onPostConstruct() {
       Map<String, MyClass> mapOfClasses = HashMap<>(); // your HashMap of objects
       AutowireCapableBeanFactory autowireCapableBeanFactory = context.getAutowireCapableBeanFactory();
       BeanDefinitionRegistry registry = (BeanDefinitionRegistry) autowireCapableBeanFactory;

       for (Map.Entry<String, MyClass> myClassEntry : mapOfClasses.entrySet()) {
         GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
         beanDefinition.setBeanClass(myClassEntry.getValue().getClass());
         beanDefinition.setAutowireCandidate(true);
         registry.registerBeanDefinition(myClassEntry.getKey(), beanDefinition);
         autowireCapableBeanFactory.autowireBeanProperties(myClassEntry,
                AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, false);
       }
    }
}
我不确定是否可以将其中一个bean标记为@Primary。但基于此,您可以通过扩展我自己没有测试过的bean解析器来定义自己的bean解析器。作为替代方案,您可以使用,因为您已经知道哪个对象将成为主bean

希望这会有所帮助

另外,如果已经可以将对象添加到中,则以下方法会将这些自定义对象添加到ApplicationContext中

ConfigurableListableBeanFactory configurableListableBeanFactory = ((ConfigurableApplicationContext)context).getBeanFactory();
configurableListableBeanFactory.registerSingleton("key_of_this_object", myClassObject);

非常感谢。当我在HashMap中有一个类列表时,这就起作用了。我的要求略有不同,因为我已经在HashMap中拥有了我想要注册为singleton的myClass实例。我最终实现了ApplicationContextAware以获取ApplicationContext,然后注册实例。谢谢你的帮助。
ConfigurableListableBeanFactory configurableListableBeanFactory = ((ConfigurableApplicationContext)context).getBeanFactory();
configurableListableBeanFactory.registerSingleton("key_of_this_object", myClassObject);