comment obtenir plusieurs instances de la même haricot au printemps?
Par défaut, printemps haricots sont des singletons. Je me demande si il existe un moyen d'obtenir plusieurs instances de la même bean pour le traitement.
Voici ce que je fais actuellement
@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);
}
}
}
Ici est la classe de Service
public class MyService implements Runnable {
private String name;
public Myservice(int i){
name=String.ValueOf(i);
}
}
J'ai simplifié mon cas d'utilisation ici.
Je veux avoir MyService, comme le printemps de haricots et d'en obtenir autant que possible en fonction de la configuartion (qui est num
) au-dessus de la boucle? vous vous demandez comment c'est possible.
Grâce
- vous pourriez le faire avec des fèves d'usine de votre contexte de l'application
- pouvez-vous donner un exemple et de montrer comment le faire?
- Bien sûr, prendre un coup d'oeil à la réponse ci-dessous
Vous devez vous connecter pour publier un commentaire.
Première que vous aurez à faire
MyService
un Printemps bean. Vous pouvez le faire en annotant la classe avec@Component
. Ensuite, comme vous le dites, le Printemps haricots sont des Singletons par défaut, donc cela peut être changé avec un plus annotation -@Scope("prototype")
.Un prototype de haricots champ d'application signifie que chaque fois que vous demandez Printemps pour une instance du bean, une nouvelle instance est créée. Cela s'applique à permettra à l'autowiring, demandant l'application de contexte pour le haricot avec
getBean()
, ou à l'aide d'un bean factory.@Scope("prototype)
est@Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
Voici un exemple simple de comment enregistrer un nombre désiré de fèves de même type
MyService()
. Je veux de service du composant