2010-05-13 17 views
6

Sé que Spring no es compatible con la inyección de interfaz y lo he leído muchas veces.¿Realmente Spring no es compatible con la inyección de interfaz?

Pero hoy, cuando encontré un artículo sobre IOC de Martin Fowler (link), parece que usar ApplicationContextAware en Spring es algo similar a la inyección de Interface.

siempre que se requiera la referencia de contexto de Spring en nuestro Spring Bean, implementaremos ApplicationContextAware e implementaremos el método setApplicationContext (ApplicationContext context), e incluiremos el bean en el archivo de configuración. ¿No es esto lo mismo que Inyección de interfaz, donde decirle a Spring que inyecte (o), digamos, pasar la referencia del contexto a este bean?

O me falta algo aquí? Gracias por cualquier información!

manikanta

+3

Parece que ha estado leyendo algunas cosas malas, Spring * much * does * admite la inyección de interfaz. – skaffman

+1

¿qué quiere decir exactamente con 'inyección de interfaz'? Solo tengo alrededor de 100 ejemplos de un bean que define el conjunto vacío Algo (Something) donde Something es una interfaz, no una clase, y Spring está perfectamente feliz de inyectar instancias de clase que implementan la interfaz. – bmargulies

+0

@skaffman No vi que Spring sea compatible con la inyección de interfaz, incluso en los documentos de Spring (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html# beans-factory-collaborators) – manikanta

Respuesta

6

Si se refiere a la interfaz de inyección as defined on wikipedia, primavera lo apoya fuera de la caja para ResourceLoaders, ApplicationContexts, MessageSource, y otros, con las interfaces ResourceLoaderAware, , MessageSourceAware, respectivamente.

También es posible ampliar este mecanismo con nuevas interfaces y dependencias mediante el registro de un BeanPostProcessor.

The Spring manual de referencia explains esta capacidad (y cuando uno debe (no) usarlo) con bastante claridad. Por cierto, generalmente he encontrado que el manual de referencia de primavera es mucho más confiable que lo que dice 'alguien en Internet'.

+1

¡Sí! Aunque Spring en realidad no es compatible con la inyección de interfaz, aún podemos lograr el mismo efecto prácticamente usando la técnica Autowiring (http://opensource.atlassian.com/confluence/spring/display/DISC/Adding+Interface+Injection+to+Spring) Por cierto, Martin Fowler es el tipo que introdujo la DI. ¿No es así? Por lo tanto, puede ser que podamos verificar su artículo. Sí, ese artículo es en general. Entonces, todo el contenido del artículo puede no ser válido para el caso de Spring. ¡Corrígeme si algo no es correcto! – manikanta

Cuestiones relacionadas