Spring之AOP日志管理配置示例(注解方式)

发表于:2015-8-13 10:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:FC WORLD!!!    来源:51Testing软件测试网采编

  测试接口
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 }
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号