java - codigo - springlayout ejemplo
¿Cuál es el equivalente de Spring para la instancia de CDI o el proveedor de Guices? (2)
Entonces, después de mucho investigar, descubrí que Spring es compatible con JSR-330. Este JSR define una API simple (toda la especificación es literalmente solo esta API) que estandariza varias interfaces de inyección de dependencia, anotaciones y comportamientos.
A diferencia de FactoryBean
de Spring, la interfaz javax.inject.Provider
no lanza Excepción al obtener la referencia de bean. Además, aún necesitaría definir este FactoryBean en algún lugar (lea XML o la clase @Configuration
, y esto es subóptimo).
Debido a un error, en la versión 3.1.1 actual, el javax.inject.Provider no funciona . Funciona en la primavera 3.1.0.
Para usarlo, simplemente necesita incluir el javax.inject jar: si usa maven puede:
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
Spring lo detectará, y desde ese momento podrás simplemente:
@Inject
Provider<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();
Como en el ejemplo de Guice, ya que es la misma API.
A pesar de mi comentario anterior a Konstantin, Spring crea el proveedor por sí mismo. (Lo estaba probando con Spring 3.1.1 y me encontré con este problema de regresión de Spring Provider )
En CDI puede definir un objeto que le dará elementos de un tipo determinado, usando:
@Inject Instance<MyObject> myObjectInstance; //... MyObject myObjectInstance.get();
Del mismo modo en Guice puedes hacer:
@Inject Provider<MyObject> myObjectInstance; //... MyObject myObjectInstance.get();
Me pregunto si hay un constructo similar en Spring, o si debe usar ApplicationContext
para obtener la referencia.
Suena como un FactoryBean