IoC设计模式,重点关注组件的依赖性、培植以及生命周期。 当然,IoC也适用于简单类, 而不只是组件。除了具有”Dependency Injection”(依赖注入)的昵称外,IoC还有另一个称呼,即Hollywood原则(“Don’t call me, I’ll call you”, 即请不要调用我,我将调用你)。 通常,应用代码需要告知容器或框架,让它们找到自身所需要的类,然后再由应用代码创建待使用的对象实例。因此,应用代码在使用实例之前,需要创建对象实例。然而,IoC将创建对象实例的任务交给IoC容器或者框架(注, 实现IoC设计模式的框架, 有时候也称之为IoC容器), 使用应用代码只需要直接使用实例,只就是IoC。
使用IoC,能够提供如下几方面的优势:
l 应用组件不需要在运行时寻找其协作者, 因此更易于开发和编写应用。 在许多IoC容器中, 借助于设值方法能够在运行时将组件依赖的其他组件注入进来。 比如IoC容器中组件对JNDI的查找工作。
l 由于借助了IoC容器管理组件的依赖关系,使得应用的单元测试和集成测试更利于展开。
l 通常, 在借助于IoC容器管理业务对象的前提下, 很少需要使用具体IoC容器提供的API。 这使得集成现有的遗留应用成为可能。
因此, 通过使用IoC能够降低组件之间的耦合度。 最终, 能够提高类的重用性, 更得于测试, 而且整个产品或者系统更利于集成和配置。
从目前来看, 存在许多的IoC容器。 主要如下:
l Spring
l PicoContainer
l Apache HiveMind
其中, Spring除了提供IoC容器外, 还为开发Java / J2EE 应用提供了其他大量功能, 比如Spring AOP、Spring MVC Framework、集成各种 O/R Mapping技术、集成各种视图技术、提供DAO支持、提供事务管理框架、基于Spring构建的Acegi安全框架等。