『配置Aspect』
若要启用AspectJ风格的注解则必须额外的导入AspectJ的jar包,此外还需要在spring的配置文件中进行配置,配置方式有两种; 一.在配置文件的Schema中进行配置
第一步:在schema中添加xmlns:aop="http://www.springframework.org/schema.aop"
第二步:在schema中的xsi:schemaLocation中添加两行:http://www.springframework.org/schema/aop以及http://www.springframework.org/schema/aop/spring-aop.xls
第三步:在beans标签体中添加<aop:aspectj-autoproxy/> 二.在beans标签体中添加一个bean
第一步:添加<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator">
第二步:在beans标签体中添加<aop:aspectj-autoproxy/> 『Aspect使用讲解』
有两种方式,第一种是使用AspectJ风格的注解,第二种是使用XML配置文件 零.预备
execution(modifier returnType classType methodName params throwsType)——切入点指示符
用法讲解
六个参数均支持通配符"*",但methodName还额外支持"(..)"通配符用来匹配一个或者多个参数,六个参数中returnType,methodName,params这三者不能省略,其余均可省略
用法示例
execution(* * (..))——匹配任意返回类型,任意方法名,任意参数的方法,也就是一切方法都可以
execution(public * *Controller get* (*,String))——匹配任意类访问修饰符为public的,任意返回值类型的,属于以Controller结尾的类的,方法名以get开头的,参数一个任意类型一个String类型的方法
execution(* org.xt.controller.*Controller.* (..))——此用法不言而喻 一.使用AspectJ风格的注解,这类注解spring支持的有:
@Aspect——此注解用来将一个类定义成一个切面
用法示例
@Aspect
classModifier class className{} @Before——此注解是用来标注增强方法,其作用是将增强方法切入连接点中,使其在连接点方法执行之前执行
用法示例
@Aspect
classModifier class className{
@Before("execution(* org.xt.controller.*.* (..))")
methodModifier methodReturnType methodName(){}
} @AfterReturning——此注解是用来标注增强方法,其作用是将增强方法切入连接点中,使其在切入点点方法执行完成成功返回之后执行,它有两个属性分别为pointcut和returning
用法讲解
returning用来指定切入点的返回值对象
用法示例
@Aspect
classModifier class className{
@AfterReturning(returning="desReturnValue",pointcut="execution(* org.xt.controller.*.* (..))")
methodModifier methodReturnType methodName(Object desReturnValue){
//打印返回值对象
System.out.println(String.valueOf(desReturnValue));
}
} @AfterThrowing——此注解是用来标注增强方法,其作用是将增强方法切入连接点中,用来处理切入点方法未处理的异常,它有两个属性分别为pointcut和throwing
用法讲解
throwing用来指定切入点抛出的异常对象
用法示例
@Aspect
classModifier class className{
@AfterThrowing(throwing="desThrowValue",pointcut="execution(* org.xt.controller.*.* (..))")
methodModifier methodReturnType methodName(Throwable desThrowValue){
//打印异常消息
System.error.println(desThrowValue.getMessage());
}
} @After——此注解是用来标注增强方法,其作用是将增强方法切入连接点中,使其在切入点点方法执行之后执行,此标注并不要求切入点方法一定要成功执行完成
用法示例
@Aspect
classModifier class className{
@After("execution(* org.xt.controller.*.* (..))")
methodModifier methodReturnType methodName(){}
} @Around——此注解的功能最是强大,因为其标注的增强方法可以直接干预切入点方法的执行
用法讲解
被此标注的增强方法必须有一个参数,参数类型为ProceedingJoinPoint
用法示例
@Aspect
classModifier class className{
@Around("execution(* org.xt.controller.*.* (..))")
methodModifier methodReturnType methodName(ProceedingJoinPoint point){}
} 补充:以上共有5种增强方法的标注,在增强方法中若要访问切入点的一些数据,比如切入点方法的参数,切入点方法所属的类对象,切入点方法的代理类对象以及切入点方法本身的一些数据则需要用到JoinPoint类
用法讲解
第一步:为增强方法定义一个JoinPoint类型的参数(@Around增强的方法就不必了,因为其本身就有一个ProceedingJoinPoint)
第二步:此时可以使用JoinPoint类型的参数对象来分别调用Object[] getArgs()来获取切入点方法的参数,Object getTarget()来获取切入点方法的类对象,Object getThis()来获取切入点方法的代理类对象,Signature getSignature()来获取切入点方法的本身信息
用法示例 @Aspect
classModifier class className{
@Before("execution(protected * org.xt.controller.*.*(..))")
methodModifier methodReturnType methodName(JoinPoint point){
Object[] args=point.getArgs();
for(Object arg:args){
System.out.println(String.valueOf(arg));
}
} @AfterReturning(returning="",pointcut="execution(protected * org.xt.controller.*Controller.*(..))")
methodModifier methodReturnType methodName(JoinPoint point){
Object target=point.getTarget();
//打印切入点方法的对象
System.out.println("切入点方法的类对象为"+target.toString());
} @AfterThrowing(throwing="",pointcut="execution(* org.xt.controller.*.* (*,String,Object))")
methodModifier methodReturnType methodName(JoinPoint point){
Object[] args=point.getArgs();
for(Object arg:args){
System.out.println(String.valueOf(arg));
}
} @After("execution(* org.xt.controller.*.* (..))")
methodModifier methodReturnType methodName(JoinPoint point)){
//打印切入点方法的方法名
System.out.println("切入点方法的方法名为"+point.getSignature().getName());
} @Around("execution(* org.xt.controller.*.* (..))")
methodModifier methodReturnType methodName(ProceedingJoinPoint point){
Object proxy=point.getThis();
System.out.println("切入点方法的代理对象为"+proxy.toString());
//执行切入点函数,可以改变切入点函数的参数
Object returnValue=point.proceed(new String[]{});
}
}

Spring Aspect 用法略讲的更多相关文章

  1. Java Spring AOP用法

    Java Spring AOP用法 Spring AOP Java web 环境搭建 Java web 项目搭建 Java Spring IOC用法 spring提供了两个核心功能,一个是IoC(控制 ...

  2. Java Spring IOC用法

    Java Spring IOC用法 Spring IoC 在前两篇文章中,我们讲了java web环境搭建 和 java web项目搭建,现在看下spring ioc在java中的运用,开发工具为In ...

  3. Spring JdbcTemplate用法整理

    Spring JdbcTemplate用法整理: xml: <?xml version="1.0" encoding="UTF-8"?> <b ...

  4. Spring @Aspect进行类的接口扩展

    Spring @Aspect进行类的接口扩展: XML: <?xml version="1.0" encoding="UTF-8"?> <be ...

  5. Spring @Aspect切面参数传递

    Spring @Aspect切面参数传递: Xml: <?xml version="1.0" encoding="UTF-8"?> <bean ...

  6. Spring @Aspect实现切面编程

    参考:http://blog.csdn.net/cdl2008sky/article/details/6268628 参考:http://www.360doc.com/content/12/0602/ ...

  7. spring RestTemplate用法详解

    spring RestTemplate用法详解 spring 3.2.3 框架参考有说明 21.9 Accessing RESTful services on the Client

  8. 范仁义html+css课程---9、video、audio、canvas和svg元素略讲

    范仁义html+css课程---9.video.audio.canvas和svg元素略讲 一.总结 一句话总结: video:HTML5视频标签. audio:html5音频标签. canvas:绘制 ...

  9. 使用spring aspect控制自定义注解

    自定义注解:这里是一个处理异常的注解,当调用方法发生异常时,返回异常信息 /** * ErrorCode: * * @author yangzhenlong * @since 2016/7/21 */ ...

随机推荐

  1. sharepoint 使用命令行注册dll文件到gac的方法

    使用命令行注册dll文件到gac的方法: gacutil.exe -i D:\SPFormLoginProject.dll 删除gac的dll方法: gacutil /u "SPFormLo ...

  2. 用indexOf获取字符窜某个字符的所有位置

    indexOf方法可以传两个参数,第二个参数是传位置的参数,利用这点获取所有的位置.例如: var str = "hello world,welcome!"; var arr = ...

  3. About大数据插码

    大数据插码主要用于在用户浏览网页和填写信息后抓取对应数据,这样就可以清晰的知道每个页面有多少用户浏览过,跳出率是多少以及用户的相应信息等. 大数据插码其实很简单,主要有以下注意事项: 1.引入相应的j ...

  4. jQuery Ajax用法

    jQuery Ajax在web应用开发中很常用,它主要包括有ajax,get,post,load,getscript等等这几种常用无刷新操作方法,下面我来给各位同学介绍介绍. 我们先从最简单的方法看起 ...

  5. React入门实例

    前言 React 的核心思想是:封装组件,各个组件维护自己的状态和UI,当状态变更,自动重新渲染整个组件. 理解:react首先值得拍手称赞的是它所有的开发都基于一个组件(component),组件和 ...

  6. 如何在标题栏的title前添加网站logo

    之前在哪个网上看到的,今天没事给写下来了: 1.将像素大小为16*16的图片命名为 favicon.ico,(图片使用的颜色好像不能超过16色),放到网站根目录下就可以了; 2.在head标签中添加代 ...

  7. mysql添加mcafee 审计插件

    插件源码地址https://github.com/mcafee/mysql-audit插件安装方法https://github.com/mcafee/mysql-audit/wiki/Installa ...

  8. Oracle SQL 基本操作之 用户权限管理方法

     Oracle SQL 基本操作之 用户权限管理方法 最近把有关用户操作和权限管理的东西整理了一下,虽然不少博客都有过类似的整理,但是自己发现他们的内容或多或少都有些错误.于是,本人亲自对每条语句进行 ...

  9. C语言考试可能会涉及到的内容

    以下是汽院下属科院C(B)考试范围,C(A)的话,不考的内容应该都会涉及到,重点内容会延伸至三.四章. 一.教材上的两套自测题 二.C语言实验与实训教程 第一章.第二章.第三章.第四章的典型练习及解释 ...

  10. [ An Ac a Day ^_^ ][kuangbin带你飞]专题六 最小生成树 POJ 2031 Building a Space Station

    最小生成树模板题 注意最后输出用%f (从C99开始%f已经不能用于输出double 即 输入用%lf 输出用%f) #include<cstdio> #include<algori ...