【发布时间】:2009-03-30 16:58:44
【问题描述】:
控制反转本质上只是检索一组已经实例化的对象吗?理论上。我想像 Spring 这样的 IoC 框架实现的更细粒度的细节有更多的功能,但从理论上讲,IoC 容器似乎像一组实例化的 bean(在 Java 世界中)一样运行,然后你可以访问这些 bean。几乎就像您使用单例对象集合一样?
【问题讨论】:
标签: spring jakarta-ee inversion-of-control
控制反转本质上只是检索一组已经实例化的对象吗?理论上。我想像 Spring 这样的 IoC 框架实现的更细粒度的细节有更多的功能,但从理论上讲,IoC 容器似乎像一组实例化的 bean(在 Java 世界中)一样运行,然后你可以访问这些 bean。几乎就像您使用单例对象集合一样?
【问题讨论】:
标签: spring jakarta-ee inversion-of-control
在实践中,它部分地掌握了单例,是的。一些 bean 将在需要时多次实例化(取决于配置),但通常您可以使用单个实例 - 特别是如果它们一旦配置为无状态。我喜欢数据在正确连接后“流经”应用程序管道的想法。
好处是“单一性”只存在于配置中,而不存在于代码中,这使得系统更具可测试性和灵活性。您查看(和公开)应用程序依赖项的方式差异很大。
【讨论】:
虽然已经接受了答案,但我再详细说明一下:
最初的 spring 主要是关于单例管理。随着自定义范围的引入,出现了特定于 Web 的范围以及创建自己的自定义范围的能力。依靠 AOP 特性,这也允许您尽可能长时间地“保持单例”,因为它使用了一种称为范围代理的技术。这可以让您在单例链的中间引入一个作用域对象——这是您经常使用 threadlocals 的功能。
所以我想说这是对实例创建的严格控制,以确保每件事都只完成所需的次数,并且最好只为每个请求完成必要的构造。单身管理是过去式。
【讨论】: