4)基于AspectJ注解如何实现AOP 实战笔记

1. @AspectJ 的由来

AspectJ是一个AOP框架(AOP框架中最成熟)。

它能够对java代码进行AOP编译(一般在编译期进行),让java代码具有AspectJ的AOP功能(当然需要特殊的编译器),与java程序完全兼容

AspectJ单独就是一门语言,需要专门的编译器(ajc编译器).

功能:Spring AOP 与ApectJ的目的都是为了统一处理横切业务,不同的是Spring AOP不尝试提供完整的AOP功能(即使它完全可以实现),更注重与Spring IOC容器结合,并结合该优势来解决横切业务的问题,AspectJ的AOP的功能完善。

实现方式

AspectJ:依赖于特殊编译器(ajc编译器)在AOP的实现方式上,

Spring:动态代理技术,的实现原理来构建Spring AOP的内部机制(动态织入),这是与AspectJ(静态织入)最根本的区别

Spring 只是使用了与 AspectJ 5 一样的注解,但仍然没有使用 AspectJ 的编译器,底层依是动态代理技术的实现,因此并不依赖于 AspectJ 的编译器。Spring AOP虽然是使用了那一套注解,其实实现AOP的底层是使用了动态代理(JDK或者CGLib)来动态植入。

2. Spring AOP - AspectJ注解

Spring把AspectJ"整合"进了Spring当中,aop命名空间


4)基于AspectJ注解如何实现AOP 实战笔记_第1张图片


4)基于AspectJ注解如何实现AOP 实战笔记_第2张图片
小狗类,会说话:


4)基于AspectJ注解如何实现AOP 实战笔记_第3张图片
@Aspect声明自己是切面类,然后before()为增强,@Before(方位)+切入点可以具体定位到具体某个类的某个方法的方位. Spring配置文件:


4)基于AspectJ注解如何实现AOP 实战笔记_第4张图片
Spring配置文件


4)基于AspectJ注解如何实现AOP 实战笔记_第5张图片

https://juejin.im/post/5a55af9e518825734d14813f

你可能感兴趣的:(4)基于AspectJ注解如何实现AOP 实战笔记)