AOP:面向切面编程。
Aspect:切面
它既包含了横切逻辑的定义,也包括了连接点的定义。Spring AOP 就是负责实施切面的框架,它将切面所定义的横切逻辑编织到切面所指定的连接点中。
JoinPoint:切点,程序运行中的一些时间点, 例如:一个方法的执行。或者是一个异常的处理。
PointCut:PointCut 是匹配 JoinPoint 的条件。
Advice:通知。特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice 。Spring AOP 使用一个 Advice 作为拦截器,在 JoinPoint “周围”维护一系列的拦截器。
Target:织入 Advice 的目标对象。
实现方式
1.JDK 动态代理 :JDK 动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是 InvocationHandler 接口和 Proxy 类。
2.CGLIB 动态代理:如果目标类没有实现接口,那么 Spring AOP 会选择使用 CGLIB 来动态代理目标类。当然,Spring 也支持配置,强制使用 CGLIB 动态代理。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为 final ,那么它是无法使用 CGLIB 做动态代理的。
代理其实是在jvm内存中真正生成相应的对象,对切点真正意义上织入了相应的通知。
以jdk动态代理为例: