什么是SpringAOP?
AOP通常指的是面向切面编程(Aspect-oriented Programming,简称AOP),它是一种编程范式,通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术。
通常用来隔离不同业务逻辑,比如常见的事务管理,日志管理等,cglib和jdk两种方式实现
为什么要有AOP?
假设现在有几个实现方法,需要做日志处理,正常来说我们只需要手动添加一下日志就可以了,我们都知道在真正的业务代码中,代码行数,以及方法数那是一个天文数字,如果都要手动添加那工作量不现实。
本着作为程序员因该想着怎么合理的偷懒的习惯,所以应该想办法提高效率。
AOP就此产生了,说白了AOP就是通过某种匹配规则去匹配方法,然后再添加对应的日志处理。而AOP本身的实现方式就是通过ASM字节码框架动态生成技术,在程序运行的时候,根据需求(添加文件)动态创建字节码文件
AOP的核心概念
- 切面(Aspect):似于 Java 中的类声明,常用于应用中配置事务或者日志管理。一般使用 @Aspect 注解或者 aop:aspect 来定义一个切面。
- 连接点(Join Point):程序执行中的特定点,比如方法执行、处理一个异常等
- 切点(Pointcut):通过一种规则匹配的正则表达式,当有连接点可以匹配到切点时,就会触发改切点相关联的指定通知。
- 通知(Advice):在切面中某个连接点采取的动作,通知方式也有5种
- around(环绕通知):前后都加
- before(前置通知)
- after(后置通知)
- exception(异常通知)
- return(返回通知) - 织入(Weaving):链接切面和目标对象创建一个通知对象的过程。
AOP其实就是一种编程思想,而这上面的这个点就是编程的具体实现规范。
一个应用中可以有多种通知方式所以在AOP中引入一种设计模式责任链模式通过这这种模式来顺序执行每一个通知当然也可以使用@Order注解,配置数字越小,越先执行。
AOP的执行过程
- IOC容器启动,用来存放对象
- 进行对象的实例化和初始化操作,将生成的完成的对象存放到容器中(容器运行中的一些象比如BeanFactoryProcesser、methodInterceptore等还有其他的很多对象)
- 从创建好的容器中获取需要对象
- 调用具体的方法开始调用
版权声明:本文为Niklaus1028原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。