Quiero crear algunos granos de primavera después del inicio en un patrón de fábrica. Por ejemplo, de vez en cuando tengo algo de trabajo que hacer y necesito crear un bean de tarea (que probablemente tenga dependientes en otros beans de primavera singleton) y ejecutarlo.Crear frijoles a pedido usando el muelle
Puede haber varios trabajos para ejecutar al mismo tiempo, por lo que cada tarea debe ser independiente (prototipo).
¿Hay algún patrón común que las personas usen para lograr esto?
Como lo veo, necesito interactuar con el contenedor/applicationContext de alguna manera, pero realmente no quiero dispersar las inyecciones de applicationContext/beanFactory y las llamadas a getBean ("...") en todas partes.
pensé en algo como esto (tenga en cuenta la "fábrica" es algo que estoy imaginando, en lugar de algo que existe)
<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>
Y luego el código
class MyTaskExecutor
{
private Factory<MyTask> taskFactory;
public void setTaskFactory(Factory<MyTask> taskFactory)
{
this.taskFactory = taskFactory;
}
}
Y tal vez una anotación versión
class MyTaskExecutor
{
@Factory(MyTask.class)
private Factory<MyTask> taskFactory;
}
¿Tal vez ya hay algo como lo anterior? O me estoy perdiendo algo fundamental en alguna parte.
Me doy cuenta de que podría tener un SingleTon MyTaskFactory y usarlo para crear instancias usando "nuevo", pero luego tendría que pasar todos sus dependientes de la fábrica lo cual parece estar mal.
Así que supongo que resumir la pregunta es
¿Cuál es la forma recomendada de crear prototipos de los granos de primavera bajo demanda desde el código de la aplicación?
Apreciar cualquier entrada.
Entiendo lo que dices, pero aún así no parece una gran solución (mencioné tener una fábrica arriba). Considere si MyTask tiene una dependencia en otros beans de ámbito prototipo, cada uno con sus propias dependencias. Tendría que fabricar todos los de la fábrica (e inyectar a sus dependientes en mi fábrica) y pasarlos a MyTask, o hacer que MyTask los cree, y tener el pase de fábrica en todos los demás dependientes del prototipo de frijol. Parece casi equivalente a no usar resortes para singletons, solo que en este caso es para prototipos de granos encuadrados. –
ver la edición sobre '@ Configurable' – skaffman