概念
- Ioc:本来由应用程序管理对象之间的依赖关系,现在交给了Spring Ioc容器,由spring来负责控制对象的生命周期和 对象间的关系,这个就是控制反转,Ioc的一个重点就是在系统运行时,动态的向某个对象提供它所需要的其他对象,这一点是通过DI注入的方式实现的
实现Ioc的主要的方式
- IoC是一个很大的概念,可以用不同的方式来实现。主要的实现形式有两种:
- 依赖查找:容器提供回调接口和上下文环境给组件。EJB和Apache Avalon都是使用这种方式。
- 依赖注入:组件不做定位查询,只是提供普通的Java方法让容器去决定依赖关系。容器全权负责组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造子传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造子参数传入的做法称为构造子注入(Constructor Injection)
Ioc的实现原理
- 原理:DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。关于反射的相关资料请查阅java doc。
Ioc的好处
- 大量减少Factory和Singleton的数量,使代码结构更加清晰,主要原我们不在查找、定位、创建和管理对象之间关系,全部交给Ioc容器管理
- Spring的Ioc容器是一个轻量级的容器,没有侵入性,不需要依赖容器的API,也不需要实现一些特殊接口
- 表面上看就少了几个new字,其实就是为了降低耦合度