其他代码参考使用注解定义增强
1.AroundLogger
1 package com.aop; 2 3 import java.lang.reflect.Method; 4 import java.util.Arrays; 5 6 import org.aopalliance.intercept.MethodInterceptor; 7 import org.aopalliance.intercept.MethodInvocation; 8 import org.apache.log4j.Logger; 9 import org.aspectj.lang.ProceedingJoinPoint; 10 import org.aspectj.lang.annotation.Around; 11 import org.aspectj.lang.annotation.Aspect; 12 /** 13 * 14 * @author Mr 15 * 环绕增强处理 16 * 注解方式的就是一个普通类 17 */ 18 @Aspect 19 public class AroundLogger{ 20 //注解方式的环绕增强处理 21 private static final Logger log = Logger.getLogger(AroundLogger.class); 22 @Around("execution(* com.biz.IUserBiz.*(..))") 23 public Object aroundLogger(ProceedingJoinPoint jp){ 24 log.info("a调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法,方法参数是:" 25 +Arrays.toString(jp.getArgs())); 26 try { 27 Object result = jp.proceed();//调用目标方法,获取目标方法的返回值 28 log.info("a调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法,方法返回值是:" 29 +result); 30 return result; 31 } catch (Exception e) { 32 log.error(jp.getSignature().getName()+"方法抛出异常"+e); 33 e.printStackTrace(); 34 } catch (Throwable e) { 35 // TODO Auto-generated catch block 36 e.printStackTrace(); 37 } 38 return null; 39 } 40 }
2.spring配置文件
1 <bean id="dao" class="com.dao.impl.IUserDaoImpl"></bean> 2 <bean id="biz" class="com.biz.impl.IUserBizImpl"> 3 <property name="dao" ref="dao"></property> 4 </bean> 5 <!-- 定义包含注解的增强类的实例 --> 6 <bean class="com.aop.AroundLogger"></bean> 7 <!-- 织入使用注解定义的增强,需要引入AOP命名空间 --> 8 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
3.测试结果