Tengo un proyecto Spring con escaneo automático y anotaciones @Component. Es necesario inyectar algún componente en diferentes beans utilizando @Autowired. ¿Va a ser el mismo bean componente creado como singleton por defecto? Si es así, ¿cómo puedo inyectar diferentes instancias del mismo componente en diferentes beans?
PD Sé que está cerca de lo básico y suena bastante general. Solo quería dejarlo claro para mí.
Gracias por adelantado
Cuando crea una definición de bean, crea una receta para crear instancias reales de la clase definida por esa definición de bean. La idea de que una definición de bean es una receta es importante porque significa que, al igual que con una clase, puede crear muchas instancias de objetos a partir de una sola receta.
Puede controlar no solo las distintas dependencias y valores de configuración que se van a conectar a un objeto que se crea a partir de una definición de bean en particular, sino también el alcance de los objetos creados a partir de una definición de bean en particular. Este enfoque es poderoso y flexible en el sentido de que puede elegir el alcance de los objetos que crea a través de la configuración en lugar de tener que hornear el alcance de un objeto en el nivel de clase de Java. Los beans se pueden definir para implementarse en uno de varios ámbitos: listo para usar, Spring Framework admite siete ámbitos, cinco de los cuales están disponibles solo si utiliza un ApplicationContext compatible con la web.
Los siguientes ámbitos son compatibles de fábrica. También puede crear un alcance personalizado.
Singleton (predeterminado) Alcanza una definición de bean único para una instancia de objeto único por contenedor Spring IoC.
Prototipo Aplica una sola definición de bean a cualquier cantidad de instancias de objetos.
Solicitar Ámbitos de una sola definición de bean al ciclo de vida de una sola solicitud HTTP; es decir, cada solicitud HTTP tiene su propia instancia de un bean creado a partir de una sola definición de bean. Solo es válido en el contexto de un Spring ApplicationContext compatible con la web.
Sesión Ámbito de una sola definición de bean para el ciclo de vida de una sesión HTTP. Solo es válido en el contexto de un Spring ApplicationContext compatible con la web.
GlobalSession Aplica una sola definición de bean al ciclo de vida de una sesión HTTP global. Por lo general, solo es válido cuando se usa en un contexto de Portlet. Solo es válido en el contexto de un Spring ApplicationContext compatible con la web.
Application Scopes una sola definición de bean para el ciclo de vida de un ServletContext. Solo es válido en el contexto de un Spring ApplicationContext compatible con la web.
Websocket Aplica una sola definición de bean al ciclo de vida de un WebSocket. Solo es válido en el contexto de un Spring ApplicationContext compatible con la web.
Para obtener más información, visite: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/
De manera predeterminada, el alcance de un bean administrado por Spring es singleton (solo se crea una instancia), si desea que haya muchas instancias, defínalo como prototype .
Utilice la siguiente anotación:
@Scope("prototype")Aquí hay un buen ejemplo completo: