V哥官网:http://www.vgxit.com
本博客对应视频教程:http://www.vgxit.com/course/23
Spring 通知传递参数
1,概述
我们上面在执行切点方法的时候,我们可能会传入一些参数给对应的切点方法,比如我们UserService的add方法:
package com.vgxit.learn.spring.ktdm.springaop.service.impl;
import com.vgxit.learn.spring.ktdm.springaop.po.User;
import com.vgxit.learn.spring.ktdm.springaop.service.IUserService;
import org.springframework.stereotype.Component;
@Component
public class UserService implements IUserService {
@Override
public void add(User user) {
System.out.println("添加用户[" + user + "]到数据库");
}
}
这个方法传入了一个User类型的参数。那么问一下同学们,如果我想要在对应的前置通知,后置通知....我们想要获取到这个User类型的参数怎么办?
2,具体操作
我们在前置,后置,正常返回,异常返回四个通知方法中,我们获取传入的参数。
1,我们修改一下我们的切面类
package com.vgxit.learn.spring.ktdm.springaop.aspect;
import org.aspectj.lang.annotation.*;
@Aspect//使用了这个注解就表明该类为一个切面类
public class TranAspect {
@Pointcut("execution(* com.vgxit.learn.spring.ktdm.springaop.service.impl.*.*(..)) && args(o)")
public void tranPointer(Object o){}
@Before("tranPointer(o)")
public void before(Object o) {
System.out.println("before:" + o);
System.out.println("获取数据库连接");
System.out.println("开启事务");
}
@After("tranPointer(o)")
public void after(Object o) {
System.out.println("after:" + o);
System.out.println("对应逻辑执行完成");
}
@AfterReturning("tranPointer(o)")
public void afterReturning(Object o) {
System.out.println("afterReturning:" + o);
System.out.println("提交事物");
}
@AfterThrowing("tranPointer(o)")
public void afterThrowing(Object o) {
System.out.println("afterThrowing:" + o);
System.out.println("事物回滚");
}
}
2,调用测试代码看效果