0
点赞
收藏
分享

微信扫一扫

Spring-12-Aspect深入


文章目录

  • ​​1.使用Aspect的参数JoinPoint​​
  • ​​2.使用后置通知@AfterReturning​​
  • ​​3.环绕通知@Around​​
  • ​​1.环绕通知是在函数执行前后,而不是里面执行的一些功能等同于@After和@Before配个使用​​
  • ​​2.有一个参数ProceedingJoinPoint,用来是否执行函数的使用(执行方法proceed())​​
  • ​​3.有返回类型,建议是object​​
  • ​​4.使用过程​​
  • ​​5.特点:是用来做事务的​​
  • ​​4.异常处理@AfterThrowing​​
  • ​​特点​​
  • ​​格式​​
  • ​​执行方式​​
  • ​​5.最终通知@After​​
  • ​​格式​​
  • ​​6.切入点表达式@Pointcut​​
  • ​​6.其他​​

1.使用Aspect的参数JoinPoint

/**
* 做一个有参数的切面函数
* <p>
* 指定通知方法的参数:JoinPoint
* <p>
* 作用是:在这个方法执行的时候,这个方法把它的所有信息传给这个代理,这个代理通过JoinPoint获取参数
* JoinPoint是由框架赋值的,不要手动,赋值,但是必须得是第一个位置,就是这个函数可以有多个参数
* 但是使用JoinPoint必须是放在第一个函数里面
*/
@After(value = "execution(public void org.example.ba1.SomeServiceImpl.doSome(String,Integer))")
public void myLater(JoinPoint jp) {

System.out.println("获取他的定义方法" + jp.getSignature());
System.out.println("方法的名称" + jp.getSignature().getName());
//获取方法的参数,是一个object的数组
Object args[] = jp.getArgs();
for (Object age : args) {
System.out.println("参数" + age);
}

Spring-12-Aspect深入_获取参数

2.使用后置通知@AfterReturning

/**
* 后置通知,这个value是切入点,之后的returning是切入点的这个函数执行后返回的object类型的对象
* 这个@AfterReturning的returning的值必须要和下面的函数的参数名称相同
* @param res
*/
@AfterReturning(value="execution(* *..doOther(..))",returning = "res")
public void myAfterReturning(String res){
System.out.println("==============后置通知===============");
System.out.println("这是个后置通知,获取的返回值是"+res);
//可以修改返回值

}
@AfterReturning(value="execution(* *..myStudent(..))",returning = "res")
public void myAfterReturning1(Student res){
System.out.println("==============对象后置通知===============");
System.out.println("这是个后置通知,获取的返回值是"+res);
//可以修改返回值
res.setName("傻大个");

}

Spring-12-Aspect深入_Spring_02

3.环绕通知@Around

1.环绕通知是在函数执行前后,而不是里面执行的一些功能等同于@After和@Before配个使用

2.有一个参数ProceedingJoinPoint,用来是否执行函数的使用(执行方法proceed())

3.有返回类型,建议是object

4.使用过程

第一步:定义object类型
object result;
第二步:获取参数
Object args[]=ProceedingJoinPoint参数名.getArgs();
参数转换
resule=ProceedingJoinPoint参数名.proceed(参数··);
第三步:可以修改结果
直接result=XXX;
return result;

5.特点:是用来做事务的

4.异常处理@AfterThrowing

特点

Spring-12-Aspect深入_赋值_03

格式

Spring-12-Aspect深入_异常处理_04


Spring-12-Aspect深入_异常处理_05


Spring-12-Aspect深入_Spring_06

执行方式

Spring-12-Aspect深入_获取参数_07

Spring-12-Aspect深入_异常处理_08

5.最终通知@After

格式

Spring-12-Aspect深入_异常处理_09

Spring-12-Aspect深入_Spring_10

6.切入点表达式@Pointcut

Spring-12-Aspect深入_获取参数_11


Spring-12-Aspect深入_Spring_12

6.其他

Spring-12-Aspect深入_Spring_13

<aop:aspectj-autoproxy proxy-target-class="true"/>


举报

相关推荐

0 条评论