切面 AOP操作日志

 亲自实践AOP,遇到的问题:(请把图一与图二进行对比,会发现环切代码的意义是什么

一、直接看下图,类中的方法1与方法2;

 方法1:首先创建连接点;

方法2:对已创建的环切点进行环切;

@Pointcut("execution(* com.zrar..*BLH.*(..))")
    public void pointCut2(){}

@Around("pointCut2()")
    public Object businessLog(ProceedingJoinPoint pjp) throws Throwable{

}

 方法1加上方法2等效于=====以下方法:

 @Around("execution(* com.zrar..*BLH.*(..))")
    public Object businessLog(ProceedingJoinPoint pjp) throws Throwable{

}

PS:我们会发现在环切的时候,执行的方法里面还有通配符;

首先是:包名 然后是: 类名 然后是方法名:方法名 括号内是:参数

*.表示通配包名  *. == com.    

com.zrar.easyweb.web.core.annotation == *.*.*.*.*.*.

..表示 通配任何包及其子包   例如 com.. ==com. *.*.*.

com.zrar..  最后的两个点,表示的是一个或者多个通配任何包及子包;

*BLH:在我开发的环境中,我们所创建的类是以BLH结尾的。所以采用了通配符的形式来表达,因为此次切面的作用是对整个系统的所有功能进行切,保留用户在浏览时的痕迹。

*(..):表示的是方法加参数。*是所有方法,括号里的点点 是所有的参数(零个或者多个)

二、以下代码是环切的核心代码;若不是环切,以下代码不可用!

Object returnVal = null;
Class targetClass = pjp.getTarget().getClass();
Signature s = pjp.getSignature();
MethodSignature ms = (MethodSignature) s;
Method method = ms.getMethod();
returnVal = pjp.proceed();

第一行代码:返回类型

第二行代码:获取目标类

第三、四行代码:获取目标方法

第五行代码:获取完整的方法,第一张图与下面这张图对应的关系。首先获取其类再就是类下首先被执行的方法。

 三、http的请求获取其值,这个作用就是获取当前登录用户的IP地址,URL等

HttpServletRequest request = RequestUtil.getRequest();

 四、注意事项;

如若在环切保存信息的时候,表中存了两条记录的话,那说明我们环切进行了两次。遇到此问题的解决方案:

1、类中加了@Aspect注解的话,那么就不需要配置bean。同时进行就会产生两条记录。

遇到的坑,望大家不要踩进去!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值