after这种通知方式不管afterthrowing是否执行它都会在最后执行
抛出异常的通知发生之后,afterreturning的通知就不会执行了
Advice应用(advice的配置)
Before advice的两种配置方式
<aop:before pointcut-ref="切入点的Id" method="切面的方法"/>。直接设置切入点(就不用单独设置<aop:point-cut/>标签了)
<aop:before pointcut="execution(* com.xyz.myapp.dao..(..))" method="doAccessCheck"/>
案例:(前置)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法。
代码:


步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、通知。

案例:(After return advice返回后通知)
<aop:after-returning>returning属性,限制方法的返回值,例如retVal。(arg-names为参数名称,它是严格匹配的。)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法(和以上相似,只不过切面类多了一个方法)。

步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、通知。

案例:(抛出异常后通知After throwing advice,<aop:after-throwing>标签多了一个throwing属性,它是限制可被传递的异常参数名称)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法(编写发生异常后切面要执行的方法)

步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、抛出异常通知。

案例:(后置通知After (finally) advice)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法(编写逻辑方法执行后要执行的切面方法)

步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、抛出异常通知。

案例:(环绕通知After (finally) advice)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法(编写逻辑方法执行后要执行的切面方法)
步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、抛出异常通知。

afterreturning应该可以做数据的校验,如果返回类型检验不符,执行相关操作(例如拒绝写入数据进入数据库)。throwing可以对于异常进行操作。
After(finally)advice
After throwing advice
使用throwing属性来指定可被传递的异常的参数名称
After returning advice
Before Advice
所有以结尾的类的方法执行前都需要先执行MoocAspect类中的before方法
AOP简单配置before
5-4 advice应用(上)
before advice
后置通知XML具体配置
前置通知XML具体配置
前置通知方法
运行出错:提示org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'moocAspect' defined
解决办法:需要导入,aop和aspect的jar包;
如果你是基于maven的项目,直接在pom.xml文件中添加:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.1.9.RELEASE</version> </dependency>
。ok
Advice应用(advice的配置)
Before advice的两种配置方式
<aop:before pointcut-ref="切入点的Id" method="切面的方法"/>。直接设置切入点(就不用单独设置<aop:point-cut/>标签了)
<aop:before pointcut="execution(* com.xyz.myapp.dao..(..))" method="doAccessCheck"/>
案例:(前置)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法。
代码:


步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、通知。

案例:(After return advice返回后通知)
<aop:after-returning>returning属性,限制方法的返回值,例如retVal。(arg-names为参数名称,它是严格匹配的。)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法(和以上相似,只不过切面类多了一个方法)。

步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、通知。

案例:(抛出异常后通知After throwing advice,<aop:after-throwing>标签多了一个throwing属性,它是限制可被传递的异常参数名称)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法(编写发生异常后切面要执行的方法)

步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、抛出异常通知。

案例:(后置通知After (finally) advice)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法(编写逻辑方法执行后要执行的切面方法)

步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、抛出异常通知。

案例:(环绕通知After (finally) advice)
步骤1:编写逻辑功能类、切面功能类、并编写各自的方法(编写逻辑方法执行后要执行的切面方法)
步骤2:编写XML配置,实例化逻辑功能类的Bean和切面功能类的Bean,配置切面、切入点、抛出异常通知。
关于AOP配置相关
<aop:config></aop:config>以及内部的配置
After advice:无论是否异常,都会调用,在after returning advice和after throwing advice之后调用
After throwing advice:在捕捉到异常后被调用
After returning advice在返回之后的通知,异常时不调用
returning将通知函数形参名赋值给它,该形参类型为切入点返回值类型
前置通知before advice在切点之前执行
实现的两种方式:
第一种:pointcut-ref引用声明好的pointcut,method需在aspect 的ref bean中(切面中)实现
第二种:pointcut声明before advice的pointcut
After (finally) advice
after-throwing 异常通知 xml配置
After throwing advice
After returning advice
<aop:after-returning/>
MoocAspect 切面类
返回后后置通知 xml
Before advice
<aop:before />
前置通知 xml配置文件