2010-05-13 7 views
6

Je sais que Spring ne supporte pas l'injection d'interface et j'ai lu cela plusieurs fois.Spring ne supporte-t-il pas vraiment l'injection d'interface?

Mais aujourd'hui, comme je suis tombé sur un article sur CIO par Martin Fowler (link), il semble que l'utilisation de ApplicationContextAware dans Spring est quelque chose de similaire à l'injection d'interface. Quand une référence de contexte Spring est requise dans notre bean Spring, nous allons implémenter ApplicationContextAware et implémenterons la méthode setApplicationContext (ApplicationContext context), et nous inclurons le bean dans le fichier de configuration. N'est-ce pas la même chose que l'injection d'interface, où où dire au ressort d'injecter (ou), disons, de passer la référence du contexte dans ce bean?

Ou il me manque quelque chose ici? Merci pour toute information!

ManiKanta

+3

On dirait que vous avez lu des mauvaises choses, Spring * supporte * beaucoup l'injection d'interface. – skaffman

+1

que voulez-vous dire par «injection d'interface»? J'ai seulement environ 100 exemples d'un bean qui définit void setSomething (Quelque chose) où Quelque chose est une interface, pas une classe, et le printemps est parfaitement heureux d'injecter des instances de classe qui implémentent l'interface? – bmargulies

+0

@skaffman Je n'ai pas vu que Spring supporte l'Injection d'Interface, même dans les docs de Spring (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html# beans-factory-collaborateurs) – manikanta

Répondre

6

Si vous voulez dire l'interface injection as defined on wikipedia, le printemps il prend en charge hors de la boîte pour ResourceLoaders, ApplicationContexts, MessageSource, et d'autres, avec les interfaces ResourceLoaderAware, , MessageSourceAware, respectivement.

Il est également possible d'étendre ce mécanisme avec de nouvelles interfaces et des déperditions en enregistrant un BeanPostProcessor.

Le manuel de référence du ressort explains cette capacité (et quand on ne devrait pas l'utiliser) assez clairement. BTW, j'ai généralement trouvé le manuel de référence du printemps à être beaucoup plus fiable que ce que «quelqu'un sur Internet» dit.

+1

Ouais! Même si Spring ne prend pas réellement en charge l'injection d'Interface, nous pouvons néanmoins obtenir le même effet en utilisant pratiquement la technique Autowiring (http://opensource.atlassian.com/confluence/spring/display/DISC/Adding+Interface+Injection+to+Spring). BTW, Martin Fowler est le gars qui a présenté le DI. N'est-ce pas? Donc, peut-être que nous pouvons vérifier son article. Oui, cet article est en général. Donc, tout le contenu de l'article peut ne pas être valable pour le cas du printemps. Corrigez-moi si quelque chose n'est pas correct! – manikanta