spring aop的使用
Posted 刚刚睡醒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring aop的使用相关的知识,希望对你有一定的参考价值。
1、aop的概念就不说了,看看常用aop增强处理方式
before -> 前置之增强处理,在目标方法执行之前织入增强处理; AfterReturning -> 后置增强处理,在目标方法正常执行(不出现异常)后织入增强处理; AfterThrowing -> 异常增强处理,在目标方法抛出异常后织入增强处理; after -> 最终增强处理,不管方法是否抛出异常,都会在目标方式执行之后执行; Around -> 环绕增强处理,在目标方法前后都可以织入增强处理。
2、aop进行xml配置比较麻烦,这里我们使用注解配置
这里顺便说一下,proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。首先说明下proxy-target-class="true"和proxy-target-class="false"的区别,为true则是基于类的代理,默认是false,基于接口创建;
如果类中的注入是@autowired(基于接口的) 用这种:
<!-- 启动对于@AspectJ -->
<aop:aspectj-autoproxy/>
如果类中的注入是@Resouce用下面这种:
<!-- 启动对于@AspectJ -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
3、类中设置
package com.utils; //定义 一个切面 @Aspect //定义一个bean组件 @Component public class MyLogger { private static final Logger logger = Logger.getLogger(MyLogger.class); /** * 注意: around通知织入的是ProceedingJoinPoint ,而其他的通知织入的是JoinPoint * execution(* com.service.*.*(..)) * 任意修饰符 com.service包下的任意类下的任意方法任意参数,都将被捕获 */ @Around("execution(* com.service.*.*(..))") public void show(ProceedingJoinPoint join) { //获取类的名称 String className = join.getTarget().getClass().getSimpleName(); //获取方法名称 String methodName = join.getSignature().getName(); //获取参数信息 String args = Arrays.toString(join.getArgs()); logger.info(className+"中的"+methodName+"参数是["+args+"]的方法执行了!"); } /** * 也可以使用切点签名的方式 * 如下面这种形式 */ @Pointcut("execution(* com.service.*.*(..))") public void cut() {} @Before("cut()") public void before(JoinPoint join) { //获取类的名称 String className = join.getTarget().getClass().getSimpleName(); //获取方法名称 String method = join.getSignature().getName(); //获取参数信息 String args = Arrays.toString(join.getArgs()); System.out.println(className+"的"+method+"执行了"); } }
以上是关于spring aop的使用的主要内容,如果未能解决你的问题,请参考以下文章