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
@Configuration
public class ApplicationMain {
@Value("${service.num: not configured}")
private int num;
//more code
@PostConstruct
public void run(){
for (int i = 0; i < num ; i++) {
MyService ser = new MyService(i);
Future<?> tasks = executor.submit(ser);
}
}
}
Here is the Service class
public class MyService implements Runnable {
private String name;
public Myservice(int i){
name=String.ValueOf(i);
}
}
I have simplified my usecase here.
I want to have MyService as spring bean and get as many as possible based on configuartion (which is num
) in the above for-loop? wondering how that is possible.
Thanks
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.Here is a simple example of how to register a desired number of beans of the same type