博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
18-spring学习-利用Annotation配置AOP
阅读量:6587 次
发布时间:2019-06-24

本文共 2340 字,大约阅读时间需要 7 分钟。

之前是通过配置完成aop操作,如果自己写的话,太麻烦了,可以使用基于annotation的配置完成。

 

第一步:打开AOP的annotation支持

加上一句话:

  
    //使用了jdk的自动动态代理,需要加上这句话,否则报错

随后需要在ServiceAspect类中编写所需要使用的annotation。

范例:修改serviceAspect类。

package com.Spring.aop;import java.lang.reflect.Array;import java.util.Arrays;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;import com.Spring.Vo.Member;@Component  //用来取代在xml中配置bean初始化@Aspect   //用来代替在xml中配置AOP操作public class ServiceAspect {    @Before(value="execution(* com.Spring..*.*(..)))")    public void serviceBefore()    {        System.out.println("AOP切面执行日志记录操作");    }    @Before(value="execution(* com.Spring..*.*(..)) and args(param)))",argNames="param")    public void serviceBefore2(Object arg)    {        System.out.println("AOP切面执行增加前操作,参数=" +arg);    }    @After(value="execution(* com.Spring..*.*(..)))")    public void serviceAfter()    {        System.out.println("AOP切面执行事务处理操作");    }    @AfterReturning(value="execution(* com.Spring..*.*(..)))",argNames="ret",returning="ret")    public void serviceAfterReturn(Object val)    //表示操作结果    {        System.out.println("AOP切面操作完成,返回结果:"+val);    }    @AfterThrowing(value="execution(* com.Spring..*.*(..)))",argNames="e",throwing="e")    public void serviceAfterThrow(Exception e)    //表示操作结果    {        System.out.println("AOP切面操作出现异常:"+e);    }    @Around(value="execution(* com.Spring..*.*(..)))")    public Object serviceAround(ProceedingJoinPoint point) throws Throwable    {        System.out.println("AOP切面数据层方法调用之前,参数:"+Arrays.toString(point.getArgs()));        Member vo=new Member();        vo.setMid("TestAOP");        vo.setName("测试AOP");        Object retVal=point.proceed(new Object[]{ vo });        System.out.println("AOP切面数据层方法调用之后,返回值:"+retVal);        return true;    }}

运行结果:

 

可以对照之前用注解的xml配置:

 

 实际操作中,需要进行一些辅助性功能编写的时候(比如日志记录),建议使用annotation的配置操作,这样的代码是最简化的,也是最直观的。

 

转载地址:http://cnhno.baihongyu.com/

你可能感兴趣的文章
图表(Chart & Graph)你真的用对了吗?
查看>>
python的自省基础
查看>>
康威定律-软件之道:软件开发争议问题剖析
查看>>
似然估计中为什么要取对数以GMM为例
查看>>
wcf系列5天速成——第一天 binding的使用(1)
查看>>
PlatformTransactionManager
查看>>
C#将dll打包到程序中
查看>>
在SQL Server中将数据导出为XML和Json
查看>>
多种问题袭来:崩溃在边缘的“直播赚钱路”
查看>>
ehcache monitor启动错误UnknownHostException
查看>>
nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
查看>>
Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境
查看>>
dubbox 的各种管理和监管
查看>>
缓存框架——Redis(一)
查看>>
O365(世纪互联)SharePoint 之使用Designer报错
查看>>
java轻量级IOC框架Guice
查看>>
大数据技术在发展 挑战与机遇并存
查看>>
这家金融巨头,要让AI人脸识别大规模应用在银行领域
查看>>
加强大数据应用助推 交通信息服务产业化进程
查看>>
关于在arm裸板编程时使用printf问题的解决方法
查看>>