Spring之AOP日志管理配置示例(注解方式)
作者:网络转载 发布时间:[ 2015/8/13 11:46:45 ] 推荐标签:软件测试管理
测试接口
1 package com.test;
2
3 import java.util.List;
4
5 public interface TestService {
6 public void test(String testStr,int age,List list);
7 }
测试接口实现
1 package com.test;
2
3 import java.util.List;
4
5 public class TestServiceImpl implements TestService{
6 public void test(String testStr, int age, List list) {
7 // TODO Auto-generated method stub
8 System.out.println("test TestServiceImpl");
9 }
10 }
测试切面类
1 package com.test;
2
3 import org.aspectj.lang.JoinPoint;
4 import org.aspectj.lang.annotation.After;
5 import org.aspectj.lang.annotation.AfterThrowing;
6 import org.aspectj.lang.annotation.Aspect;
7 import org.aspectj.lang.annotation.Before;
8 import org.aspectj.lang.annotation.Pointcut;
9 import org.springframework.stereotype.Component;
10
11
12 @Aspect
13 @Component
14 public class LogAspect {
15
16 /**
17 * execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
18 1.modifiers-pattern:方法的操作权限
19 2.ret-type-pattern:返回值
20 3.declaring-type-pattern:方法所在的包
21 4.name-pattern:方法名
22 5.parm-pattern:参数名
23 6.throws-pattern:异常
24 说明:除ret-type-pattern和name-pattern之外,其他都是可选的。上例中,execution(* com.spring.service.*.*(..))表示com.spring.service包下,返回值为任意类型;方法名任意;参数不作限制的所有方法。
25 */
26
27 private final String cutValue = "execution(public * com.test.*.*.*(..))";
28
29 /**
30 * 配置前置通知
31 * @param jp
32 * @throws Exception
33 */
34 @Before(cutValue)
35 public void beforeShow(JoinPoint jp) {
36 // HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.getRequestAttributes())).getRequest(); //((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
37 //// 请求的IP
38 // String ip = request.getRemoteAddr();
39 // System.out.println("请求ip地址:"+ip);
40 // String className = jp.getThis().toString();
41 // System. out.println("====位于:" +className);
42 String sName = jp.getTarget().getClass().getName();
43 System.out.println("【类名】"+sName);
44 String methodName = jp.getSignature().getName(); //获得方法名
45 System. out.println("【调用方法】" +methodName);
46 Object[] args = jp.getArgs(); //获得参数列表
47 for (Object object : args) {
48 System. out.println("【请求参数 】:"+object);
49 }
50 System. out.println("【" +jp.getSignature().getName()+"】方法调用开始!");
51
52 }
53
54 /**
55 * 配置后置通知
56 * @param jp
57 */
58 @After(cutValue)
59 public void afterShow(JoinPoint jp) {
60 System. out.println("【" +jp.getSignature().getName()+"】方法调用结束!");
61 }
62
63 /**
64 * Service 切点
65 * 配置切入点,该方法无方法体,主要为方便同类中其他方法使用此处配置的切入点
66 */
67 @Pointcut(cutValue)
68 public void aspectExecption(){ }
69
70 /**
71 * 配置抛出异常后通知,使用在方法aspectExecption()上注册的切入点
72 * @param jp
73 * @param ex
74 */
75 @AfterThrowing(pointcut = "aspectExecption()", throwing = "ex")
76 public void doAfterThrowing(JoinPoint jp, Throwable ex) {
77 System.out.println("【"+jp.getSignature().getName()+"】异常信息:"+ex);
78 }
79 }
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11