AOP:面向切面编程
通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术
AOP的底层原理就是动态代理
java的动态代理有 jdk动态代理和CGLib动态代理
简单来说,AOP就是将相同逻辑的重复代码横向抽取出来,使用动态代理技术将这些重复代码织入到目标对象方法中,实现和原来一样的功能
AOP术语
1、连接点
能够被拦截的地方:Spring AOP是基于动态代理的,所以是方法拦截的。每个成员方法都可以称之为连接点~
2、切点
具体定位的连接点:上面也说了,每个方法都可以称之为连接点,我们具体定位到某一个方法就成为切点。
3、增强/通知
表示添加到切点的一段逻辑代码,并定位连接点的方位信息。
简单来说就定义了是干什么的,具体是在哪干
Spring AOP提供了5种Advice类型给我们:前置(@Before)、后置(@After)、返回(@AfterReturning)、异常(@AfterThrowing)、环绕(@Around)给我们使用!
4、织入
将增强/通知添加到目标类的具体连接点上的过程。
5、引入/引介
引入/引介允许我们向现有的类添加新方法或属性。是一种特殊的增强!
6、切面
切面由切点和增强/通知组成,它既包括了横切逻辑的定义、也包括了连接点的定义。
IOC 控制反转
传统的做法是,在A类中new B类,实现依赖。
IOC是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。
IOC是将依赖交由容器来做,就好像是婚介所,大家都把自己的需求以及自我介绍都放到容器里面,然后由中介为你牵线,选择你想要的对象,实现依赖。
控制反转,顾名思义,就是将以前由类自己去实现依赖的方式换成由容器来实现实现并注入依赖