1. IOC
1.1 IOC概念
IOC(Inversion Of Control) 中文即‘控制反转’
DI(Dependency Injection) 中文即‘依赖注入’
Simple think that IOC IS DI
1.2 为何设计、作用
1、传统Java程序中,必须由程序本身主动去New Object(),程序本身代码利用率不高、代码之间耦合度高,生命周期由程序本身控制
2、IOC 要求所有的类都到Spring容器中注册,告诉Spring你是啥,需要啥,能干啥
3、Spring 在系统运行到适当的时机就会提供需要的类,这一点通过DI来实现
4、依赖注入通过反射去实现:通过反射调用对象的set方法将事先保存在HashMap中的类属性注入
5、对象的生命周期,通过SCOPE来设置,一般分为singleton和prototype
1.3 优点
1、程序中无需控制对象类的生命周期
2、降低组件之间的耦合
3、降低业务代码之间的复杂度,无需管理各种对象的创建报错呀等
4、代码更简洁,对程序员的要求变低
2. AOP
2.1 AOP概念
1、Aspect 切面:通常一个类,里面定义切入点和通知
2、JointPoint 连接点:可以认为是执行中方法调用的地方
3、PointCut 切入点:拦截连接点的操作定义
4、Advice 通知:拦截之后执行的代码,分为:前置、后置、环绕、异常、最终通知五类
5、AOP代理: AOP框架创建的对象,代理就是目标对象的增强
5.1 代理: 主要分为动态代理和CGLib
动态代理即Java SE动态代理:可以为一个或者多个接口生成实现对象,实现生成对象接口的代码中可以添加其定义的通知。缺点为只能针对接口进行代理,且依靠反射需要考虑性能
CGLib即字节码生成(CGLib动态代理) 指在运行时动态生成类的一个子对象,并覆盖其中一个特定的方法,同时可以增加一些特定的通知。即基于子类
5.2目标对象:代理的目标对象
6、AOP Aspect Oriented Programming 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
2.2 为何设计、作用
1、Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑和系统服务(auditing and transaction)进行内聚性的开发。应用现象只实现基础的完成业务逻辑。它们并不负责(甚至是意识)其它的系统级关注点。
2、AOP针对业务过程中的切面提取,它所面对的是处理过程中的某个步骤阶段,以达到降低各部分组件耦合度的隔离效果;OOP针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
3、主要功能:日志记录、性能统计、安全控制、事物处理、异常处理等
简单理解即:代码设计的时候只需考虑主流程,而不考虑那些无关紧要的流程逻辑,后期再通过AOP添加代码且代码的利用率和维护程度更高等。
2.3 优点
1、降低逻辑代码之间的耦合度
2、提高代码可重用性
3、提高开发效率