控制反转 (IOC),面向对象的一种设计原则,目的是降低耦合度。依赖注入(DI)是实现控制反转的常见方式,控制反转的另外一种实现方式是 依赖查找。控制反转中的控制指的是自己控制(创建)自己的成员变量,反转指的是由通过自己去控制(创建)成员变量变成由第三方来传递给自身,也就是第三方将自己的依赖(所需的成员变量)注入到自身。
1. 控制反转
先描述一个场景:一个对象A要引用另外一个对象B, 那么需要在 A 中使用 new 关键字创建一个 B 对象,例如 在services层中调用你需要使用对应的 dao,你需要先创建该dao,这就增加了耦合度。
你可能会使用 工厂模式 去创建 dao,去减低耦合,Spring IOC 中使用的就是一个 基于 xml 的 超级工厂,可以在 xml 中集中的注册 bean,你要声明要注册bean的类全限定名和你想要给这个赋值的数据,Spring通过反射机制创建这个对象。
当然想要注册 bean和使用注册的bean需要先加载 xml 文件,然后可以使用 bean 工厂获得注册的 bean,Bean 工厂会自动将 对象A 所需 的对象 B 给赋值过去(也可以称作把对象A的依赖进行了注入)。
2. 依赖注入
依赖注入:依赖注入会将所依赖的关系自动交给目标对象,而不是让对象自己获取依赖。
实现依赖注入的两种方式:xml 和 注解,注解是为了减少 xml 中的配置。
Spring 使用 xml 装配 bean 的例子。
Spring使用注解(Annotation)进行bean的装配总结+实例。