Desidero creare alcuni bean a molla dopo l'avvio in uno schema di fabbrica. Ad esempio, ogni tanto ho del lavoro da fare e ho bisogno di creare un bean di attività (che probabilmente ha dipendenze da altri bean singleton) ed eseguirlo.Creazione di bean su richiesta utilizzando la molla
Possono esserci più parti di lavoro da eseguire contemporaneamente, quindi ogni bean di attività deve essere indipendente (prototipo).
C'è qualche modello comune che le persone utilizzano per raggiungere questo obiettivo?
Come vedo, ho bisogno di interagire con il contenitore/applicationContext in qualche modo, ma non voglio davvero disperdere le iniezioni di applicationContext/beanFactory e le chiamate a getBean ("...") ovunque.
ho pensato a qualcosa di simile (si noti la "fabbrica" è qualcosa che sto immaginando, piuttosto che qualcosa che esiste)
<bean id="myTask" class="MyTask" scope="prototype">
<property name="entityManager" ref=".../>
...
</bean>
<bean id="myTaskExecutor" class="MyTaskExecutor">
<property name="taskFactory">
<xxx:factory bean="myTask"/>
</property>
</bean>
E poi il codice
class MyTaskExecutor
{
private Factory<MyTask> taskFactory;
public void setTaskFactory(Factory<MyTask> taskFactory)
{
this.taskFactory = taskFactory;
}
}
E magari un'annotazione versione
class MyTaskExecutor
{
@Factory(MyTask.class)
private Factory<MyTask> taskFactory;
}
Forse c'è già qualcosa di simile a quanto sopra? O mi manca qualcosa di fondamentale da qualche parte.
Mi rendo conto che potrei avere un singleton MyTaskFactory e usarlo per creare un'istanza usando "nuovo", ma poi dovrei passare tutti i dipendenti della fabbrica che si sentono in errore.
Quindi credo di riassumere la questione è
Qual è il modo consigliato di creare fagioli primavera prototipo on-demand all'interno di codice dell'applicazione?
Apprezzare qualsiasi input.
Ricevo quello che stai dicendo, ma non mi sembra una soluzione eccezionale (ho detto di avere una fabbrica sopra). Considerare se MyTask ha una dipendenza da altri bean con scope prototipo, ciascuno con le proprie dipendenze. Dovrei fabbricare tutti quelli in fabbrica (e iniettare i loro dipendenti nella mia fabbrica) e passarli a MyTask, oppure farli creare da MyTask, e fare passare la fabbrica in tutti gli altri dipendenti dei bean prototipo. Sembra tutto l'equivalente di non usare la molla per singleton, solo in questo caso è per i fagioli con scope prototipo. –
vedi modifica riguardante '@ Configurable' – skaffman