how to get multiple instances of same bean in spring?

后端 未结 2 1918
夕颜
夕颜 2020-12-20 13:27

By default, spring beans are singletons. I am wondering if there is a way to get multiple instances of same bean for processing.

Here is what I do currently

相关标签:
2条回答
  • 2020-12-20 13:36

    Here is a simple example of how to register a desired number of beans of the same type

    @Configuration
    public class MultiBeanConfig implements ApplicationContextAware {
    
        @Value("${bean.quantity}")
        private int quantity;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            for (int i = 0; i < quantity; i++) {
                ((ConfigurableApplicationContext)applicationContext).getBeanFactory()
                        .registerSingleton("my-service-" + i, new MyService());
            }
            assert(applicationContext.getBeansOfType(MyService.class).size() == quantity);
        }
    
        class MyService {
    
        }
    }
    
    0 讨论(0)
  • 2020-12-20 13:44

    First you'll have to make MyService a Spring bean. You can do this by annotating the class with @Component. Next, as you say, Spring beans are Singletons by default, so this can be changed with one more annotation - @Scope("prototype").

    A prototype bean scope means that each time you ask Spring for an instance of the bean, a new instance will be created. This applies to Autowiring, asking the application context for the bean with getBean(), or using a bean factory.

    0 讨论(0)
提交回复
热议问题