【问题标题】:Doesn't Spring really support Interface injection at all?Spring 真的不支持接口注入吗?
【发布时间】:2011-02-19 02:34:18
【问题描述】:

我知道 Spring 不支持接口注入,我已经读过很多次了。

但是今天我看到 Martin Fowler (link) 的一篇关于 IOC 的文章,似乎在 Spring 中使用 ApplicationContextAware 有点类似于接口注入。

当我们的 Spring bean 中需要 Spring 的上下文引用时,我们将实现 ApplicationContextAware 并实现 setApplicationContext(ApplicationContext context) 方法,并将 bean 包含在配置文件中。这和接口注入不一样,在哪里告诉 Spring 注入(或),比如说,将上下文的引用传递给这个 bean?

或者我在这里遗漏了什么?感谢您提供任何信息!

马尼坎塔

【问题讨论】:

  • 听起来你一直在读一些不好的东西,Spring非常确实支持接口注入。
  • “接口注入”到底是什么意思?我只有大约 100 个定义 void setSomething(Something) 的 bean 示例,其中 Something 是接口,而不是类,并且 spring 非常乐意注入实现接口的类实例?
  • @skaffman 我没有看到 Spring 支持接口注入,即使在 Spring 文档中 (static.springsource.org/spring/docs/3.0.x/…)
  • @bmargulies 为接口注入实现的 bean 并不是接口注入所说的。我们将通过实现依赖 bean 的关联接口将 bean 依赖注入到我们的实际对象中。因此,当实例化实际对象时,容器会调用该接口的注入器。请查看 Martin Fowler 的 IOC 文章(链接在发布的问题中)

标签: java spring inversion-of-control


【解决方案1】:

如果您的意思是接口注入as defined on wikipedia,spring 开箱即用地支持 ResourceLoaders、ApplicationContexts、MessageSource 和其他接口,分别具有接口ResourceLoaderAwareApplicationContextAwareMessageSourceAware

还可以通过注册BeanPostProcessor 来使用新接口和依赖项扩展此机制。

Spring 参考手册explains 这个功能(以及何时应该(不)使用它)非常清楚。顺便说一句,我通常发现弹簧参考手册比“互联网上的某个人”所说的要可靠得多。

【讨论】:

  • 是的!尽管 Spring 实际上并不支持接口注入,但我们仍然可以使用自动装配技术(opensource.atlassian.com/confluence/spring/display/DISC/…)实际实现相同的效果。顺便说一句,Martin Fowler 是介绍 DI 的人。不是吗?所以,也许我们可以查看他的文章。是的,那篇文章很笼统。所以文章的所有内容可能不适用于 Spring 案例。如果有不正确的地方请纠正我!
猜你喜欢
  • 1970-01-01
  • 2018-01-16
  • 2011-09-23
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 2022-10-31
  • 1970-01-01
  • 2012-11-28
相关资源
最近更新 更多