Spring aop

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动态代理为例:


jdk动态代理
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。