标签:for getname 异常 throws spec 日志 mat new ann
一:springAOP常用的注解
@Aspect:声明方面组件
@Before:声明前置通知
@After-returning:声明后置通知
@After:声明最终通知
@Around:声明环绕通知
@After-throwing:声明异常通知
二:使用SpringAOP的注解对总结一中的案例进行重构
1:注释掉方面组件的声明以及将方面组件应用到目标组件的配置
1 <!-- 配置日志组件 2 <bean id="operatorLogger" class="com.hlcui.aspect.OperatorLogger"></bean> 3 4 配置方面组件 5 <aop:config> 6 <aop:aspect ref="operatorLogger"> 7 <aop:before method="logger" pointcut="within(com.hlcui.controller..*)"/> 8 </aop:aspect> 9 10 <aop:aspect ref="operatorLogger"> 11 <aop:around method="logger2" pointcut="within(com.hlcui.controller..*)"/> 12 </aop:aspect> 13 14 <aop:aspect ref="operatorLogger"> 15 <aop:after-throwing method="logger3" throwing="e" pointcut="within(com.hlcui.controller..*)"/> 16 </aop:aspect> 17 </aop:config>--> 18 19 <!-- 开启SpringAOP的注解扫描 --> 20 <aop:aspectj-autoproxy proxy-target-class="true"/>
2:使用@Aspect注解声明方面组件,并且在方面组件上面声明前置、后置或者是环绕通知
1 /** 2 * 3 */ 4 package com.hlcui.aspect; 5 6 import java.text.SimpleDateFormat; 7 import java.util.Date; 8 9 import org.aspectj.lang.ProceedingJoinPoint; 10 import org.aspectj.lang.annotation.AfterThrowing; 11 import org.aspectj.lang.annotation.Around; 12 import org.aspectj.lang.annotation.Aspect; 13 import org.aspectj.lang.annotation.Before; 14 import org.springframework.stereotype.Component; 15 16 17 /** 18 * @author Administrator 19 * 20 */ 21 @Aspect 22 @Component 23 public class OperatorLogger { 24 25 @Before("within(com.hlcui.controller..*)") 26 public void logger(){ 27 System.out.println("-->记录用户日志"); 28 } 29 30 @Around("within(com.hlcui.controller..*)") 31 public Object logger2(ProceedingJoinPoint p ) throws Throwable{ 32 String targetName = p.getTarget().getClass().getName(); 33 String methodName = p.getSignature().getName(); 34 String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); 35 String msg = date+"执行"+targetName+methodName; 36 System.out.println(msg); 37 Object obj = p.proceed(); 38 System.out.println("调用目标组件业务方法后"); 39 return obj; 40 } 41 42 @AfterThrowing(pointcut="within(com.hlcui.controller..*)",throwing="e") 43 public void logger3(Exception e){ 44 StackTraceElement[] eles = e.getStackTrace(); 45 System.out.println(eles[0].toString()); 46 } 47 }
3:运行测试方法
通过结果可以看出,通过注解声明方面组件成功切入目标组件。
标签:for getname 异常 throws spec 日志 mat new ann
原文地址:http://www.cnblogs.com/warrior4236/p/6142827.html