一、IOC和DI概念

Ioc(Inversion of Control),即“控制反转”在Java开发中,Ioc意味着将你设计好的对象交给容器控制,由spring来负责控制对象的生命周期和对象间的关系,不用自己new对象创建。

DI(Dependency Injection),即“依赖注入”组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中

IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”

二、Ioc的 实现原理

spring中的IoC机制的原理 其实就是通过解析xml文件 通过反射创建出我们所需要的bean 再将这些bean挨个放到集合中 然后对外提供一个getBean 方法 以便我们获得bean。

在反射中,首先要读取applicationContext.xml配置文件中的信息,通过forName()(其他方法也可以的)加载UserAction类(根据从配置文件中获取的完整的类路径来加载),获取class对象,利用Class类中的getDeclaredFields() 获取到userService属性,根据属性名称类拼接setter方法,获取属性的类型(忘记什么方法了),通过newInstance()方法实例化userService,获取setUserService()方法的对象, 来执行Method类中的invoke()方法来对UserAction类中userService属性进行setter方法赋值。