本例子只是在insert时候获取插入对象执行一些其他的操作。比如记录,返回之类
首先在pom.xml下导入aop的依赖
是否需要在程序主类中增加@EnableAspectJAutoProxy 注解
答案是否。只要引入了AOP依赖后,默认已经增加了@EnableAspectJAutoProxy。
-
@Aspect // 表示一个切面bean
-
@Component // bean容器的组件注解。虽然放在contrller包里,但它不是控制器。如果注入service,但我们又没有放在service包里
@Aspect @Component public class LogAop {
定义切入点
///*1、execution 表达式主体
//2、第1个* 表示返回值类型 *表示所有类型
//3、包名 com.*.*.controller下
//4、第4个* 类名,com.*.*.controller包下所有类
//5、第5个* 方法名,com.*.*.controller包下所有类所有方法
//6、(..) 表示方法参数,..表示任何参数
private static final String logAfterPoint = "execution(public * infoAsset.assetLog.dao..ILogDao.insertLog(..))"; @Autowired private SendToIRight invoke ;
@Pointcut(logAfterPoint)
public void point()
{
}
@After("point()")//方法里面注入连接点
public void doBefore(JoinPoint joinPoint) throws Throwable {
// 接收到请求,记录请求内容
Object[] objs = joinPoint.getArgs();
//1.joinpoint.getargs():获取带参方法的参数
//2.joinpoint.getTarget():.获取他们的目标对象信息
//3..joinpoint.getSignature():(signature是信号,标识的意思):获取被增强的方法相关信息
if(objs.length>0) { Object obj = objs[0]; //业务代码 if(obj instanceof BaseIrightPojoFilter) { invoke.invoke((BaseIrightPojoFilter)obj, ChangeTypeEnum.Insert); } } } }