DI(DependencyInjection)依赖注入DI:应用程序依赖于容器来创建和注入它所需要的外部资源,动态地将它所需要的其他对象A提供给一个对象(基于依赖的onC)->Dependency->Container(acquireC,asanexternalresource)->InjectC(construction,method,annotation等)->AAdependstothecontainer,为什么呢?A需要容器提供的外部资源(C)。将容器资源(C)注入到A中。好处:提高组件复用频率,为系统搭建一个灵活可扩展的平台。IOC(InversionofControl)InversionofControl控制依赖反转到调用链的开始。这样你就可以完全控制依赖关系,通过调整不同的注入对象来控制程序的行为。比如IocFoo类使用memcache,不用修改IocFoo类的代码就可以使用redis。正向旋转:IocFoo需要RedisCache,获取IocFoo中的RedisCahce对象,并进行处理。反转:IocFoo不再主动获取RedisCache对象,而是被动等待。等待IOC/DI容器获取到RedisCache,然后注入回IocFoo。IOC/DIcontainerDI:应用程序依赖容器创建并注入它需要的外部资源A(依赖C)->依赖->容器(获取C,作为外部资源)->注入C(构造,method,annotationetc.)->AIOC:容器控制应用程序,容器将应用程序需要的外部资源反向注入到应用程序中,依赖对象的获取是反向的。控制:IOC容器控制对象,主要控制外部资源的获取(对象、文件、资源等)。正向旋转:对象中主动控制直接获取依赖对象,对象主动获取依赖倒置:容器帮助创建并注入依赖对象,容器将依赖注入对象A(依赖C,不依赖主动获取)->被动等待∧|容器(获取C,将其作为外部资源注入到A中)好处:有效地将对象与其需要的外部资源分离,使它们松散耦合,有利于功能复用,更重要的是,使整个程序的架构变得非常灵活。Container(容器)容器负责实例化、注入依赖、处理和管理依赖等DIContainer(依赖注入容器)依赖注入容器真正的依赖注入容器会提供更多的特性,比如自动绑定(Autowiring)或者自动解析(AutomaticResolution)注解解析器(Annotations)延迟注入(Lazyinjection)代码参考传统模式依赖注入MoreDependencyInjectionExamplesInversionofControlContainersDependencyInjectionContainers
