1. AOP 关键词
target:目标类,需要被代理的类。例如:ArithmeticCalculator
Joinpoint(连接点):所谓连接点是指那些可能被拦截到的方法。例如:所有的方法
PointCut 切入点:已经被增强的连接点。例如:add()
advice:通知/增强,增强代码。例如:showRaram、showResult
Weaving(织入):是指把增强 advice 应用到目标对象 target 来创建新的代理对象proxy的过程.
proxy 代理类:通知+切入点
Aspect(切面)::是切入点 pointcut 和通知 advice 的结合
2. AOP 的作用
当我们为系统做参数验证,登录权限验证或者日志操作等,为了实现代码复用,我们可能把日志处理抽离成一个新的方法。但是这样我们仍然必须手动插入这些方法,这样的话模块之间高耦合,不利于后期的维护和功能的扩展,有了 AOP 我们可以将功能抽成一个切面,代码复用好,低耦合。
3. AOP 的通知类型
Spring 按照通知 Advice 在目标类方法的连接点位置,可以分为5类
前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
异常返回通知[After throwing advice]:在连接点抛出异常后执行。
返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。
Spring 中使用五种通知
1. 前置通知 <aop:before method="" pointcut="" pointcut-ref=""/> method : 通知,及方法名 pointcut :切入点表达式,此表达式只能当前通知使用。 pointcut-ref : 切入点引用,可以与其他通知共享切入点。 通知方法格式:public void myBefore(JoinPoint joinPoint){ 参数1:org.aspectj.lang.JoinPoint 用于描述连接点(目标方法),获得目标方法名等2. 后置通知 目标方法后执行,获得返回值 <aop:after-returning method="" pointcut-ref="" returning=""/> returning 通知方法第二个参数的名称 通知方法格式:public void myAfterReturning(JoinPoint joinPoint,Object result){ 参数1:连接点描述 参数2:类型Object,参数名 returning="result" 配置的3. 异常通知 目标方法发生异常后 <aop:after-throwing method="testException" throwing="e" pointcut="execution(* com.anqi.testAop.ArithmeticCalculator.div(..))"/> throwing 发生的异常 通知方法格式:public Object testRound(ProceedingJoinPoint pjp){ 参数1:ProceedingJoinPoint 返回值为 reslut
4. 基于 xml 的
共同学习,写下你的评论
评论加载中...
作者其他优质文章