面向切面编程(二)

Spring AOP的基本概念

为什么使用AOP?

譬如在某些情况,有两个对象需要在同一个事务中控制,这就不是面向对象可以解决的问题,而需要用到面向切面的编程。

AOP编程有着重要意义,首先它可以拦截一些方法,然后把各个对象组织成一个整体。管理包括日志、数据库事务等操作。在一些常用的流程中,比如数据库事务,AOP会提供默认的实现逻辑,也会提供一些简单的配置,程序猿就能比较方便地修改默认的实现,达到符合真实应用的效果,这样就可以大大降低开发的工作量,提高代码的可读性和可维护性,将开发集中在业务逻辑上。

面向切面编程的术语

1.切面(Aspect)

切面就是在一个怎么样的环境中工作。在动态代理中可以把它理解成一个拦截器。

2.通知(Advice)

通知是切面开启后,切面的方法。

前置通知(before):在动态代理反射原有对象方法或者执行环绕通知前执行的通知功能。

后置通知(after):    在动态代理反射原有对象方法或者执行环绕通知后执行的通知功能。无论是否抛出异常,它都会被执行。

返回通知(afterReturning):在动态代理反射原有对象方法或者执行环绕通知无异常后执行的通知功能。

异常通知(afterThrowing):在动态代理反射原有对象方法或者执行环绕通知产生异常后执行的通知功能。

环绕通知(around):在动态代理中,它可以取代当前被拦截对象的方法,提供回调原有被拦截对象的方法。

3.引入(Introduction)

引入允许我们在现有的类里添加自定义的类和方法。

4.切点(Pointcut)

告诉Spring AOP在什么时候启动拦截并织入对应的流程中,因为并不是什么时候都需要启动AOP,它往往通过正则表达式进行限定。

5.连接点(join point)

连接点对应的是具体需要拦截的东西,比如通过切点的正则表达式去判断哪些方法是连接点,从而织入对应的通知。

6.织入(Weaving)

织入是一个生成代理对象(JDK和CGLIB)并将切面内容放入到流程中的过程。

2020-02-28_134828

Spring对AOP的支持

Spring AOP是一种基于方法拦截的AOP,在Spring中有4种方式去实现AOP的拦截功能,真正常用的使用@AspectJ注解的方式,以及XML配置。

原文地址:https://www.cnblogs.com/xc-xinxue/p/12376904.html