什么是DI机制? 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当你一个角 色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但是在spring中, 创建被调用者的工作不再由调用者完成,因此成为控制反转,创建被调用者的工作由spring来完成,然后注入调用者。因 此也称为依赖注入。 spring以动态灵活的方式来管理对象,注入的三种方式,设置注入,构造注入和接口注入。如: ·接口注入 public class ClassA{ private InterfaceB clzB; public init(){ Object obj = Class.forName(Config.BImplementation).newInstance(); clzB = (InterfaceB) obj ; } } ·构造注入,即通过构造函数完成依赖关系的设定: public class DIByConstrUCtor{ private final DataSource dataSource; private final String message; public DIByConstructor (DataSource ds , String msg){ this.dataSource = ds; this.message = msg; } } ·设置注入 典型的设置注入,即通过类的setter方法完成依赖关系的设置。 1. 接口注入: 接口注入模式因为具备侵入性,它要求组件必须与特定的接口关联,因此并不被看好,实际使用有限。 2. 构造子注入: 在构造期间即创建一个完整、合法的对象,对于这条Java设计原则,构造子无疑是最好的响应者。 避免了繁琐的setter方法的编写,所有依赖关系均在构造函数中设定,依靠关系集中呈现,更加易读。 由于没有setter方法,依靠关系在构造时由容器一次性设定,因此组件在被创建之后即处相对不变的稳定状态。 无需担心上层代码在调用过程中执行setter方法对组件依赖关系产生破坏,非凡是对于Singleton模式的组件而言,这 可能对整个系统产生重大的影响。 同样,由于关联关系仅在构造函数中表达,只有组件创建者需要关心组件内部的依靠关系。对调用者而言,组件 中的依靠关系处于黑盒之中。对上层屏蔽不必要的信息,也为系统的层次清楚行提供了保证。 3. 设置注入的有点: 直观,自然 什么是Aop ? 面向切面编程(Aop)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面: 1. 面向切面编程提供声明式事物管理 2. spring支持用户自定义的切面 面向切面编程(aop)是对面向对象(oop)的补充。面向对象编程将程序分解成各个层次的对象,面向切面编程 将程序运行过程分解成各个切面。Aop从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象, aop是动态的抽象,是对应执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。 aop框架具有的两个特征: 1. 各个步骤之间的良好隔离性 2. 源代码无光性