AspectJ 概念

  • @AspectJ类似纯Java注解的普通Java类
  • Spring可以使用AspectJ来作为切入点
  • AOP在运行时仍是纯SpringAOP,对AspectJ无依赖

配置:

  • 对@AspectJ可以使用XML方式配置或Java注解风格配置
  • 确保使用AspectJ1.6.8以上版本的AspectJweaver.jar

xml风格:
aop:aspectj-autoproxy

注解风格:
@Configuration
@EnableAspectJAutoProxy

AspectJ注解

  • @Aspect-切面实现类(不能被自动检测,需要配合@Component一起使用)
    Aspect 标注的类会从代理中排除,否则会造成死循环
  • @Pointcut-切入点方法声明
    切入点方式类型

    切入点只能声明在返回类型为void的空方法上(原则是简单、单一)
    可以包含参数,如@Pointcut("myPointcut() && args(a,b..)")
    组合Pointcut 可以通过&& || ! 将声明好的切入点方法名进行组合
    好的切入点应包含一下几个方面
  • 选定特定类型:execution、get、set、call、handler
  • 确定范围:within、whthincode
  • 匹配上下文信息:this、target、@annotation

Advice-通知

@Before("myPointcut() && args(a,b..)")//此处args为可选项,即为Before注解的方法的入参
@Before("myPointcut(a,b..)")//与上面一种方式等价

@AfterReturning("pointcut路径")//这里的路径可以是完整的包名,也可以是已经声明好的pointcut方法名,如myPointcut()
@AfterReturning(pointcut="myPointcut()",returning="retVal")//这里的返回值,可以用于注解的方法的入参

@AfterThrowing(pointcut="myPointcut()",throwing="ex")//这里的抛出,可以用于注解的方法的入参

@After("myPointcut()")

@Around("myPointcut()")//注解方法需要有一个入参ProceedingJoinPoint,调用pjp.proceed()来执行切入点方法

使用注解引入参数
1、定义一个注解
2、在切入点方法上使用注解,并声明注解的值
3、在通知方法上使用 && @Annotation(注解名) 声明使用注解作为入参,并将通知方法的入参定义为该注解,即可以在通知方法中使用注解的.value()方法获取切入点方法的注解值

argNames属性可以指定注解的参数名称,若第一个参数是JoinPoint、ProceedingJoinPoint、JoinPoint.StaticPart,可以忽略

  • Introduction-引入
    @DeclareParents(value="匹配",defaultImpl=xxx.class)-用以声明Introduction

Perthis-Aspect注解的子句实现

@Aspect("perthis()")--每个独立的service执行时都创建一个切面实例,在service对象的每个方法第一次执行时创建实例,在service对象失效时同时失效

JavaSpring【七、AspectJ】的更多相关文章

  1. Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

    本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...

  2. JavaSpring【一、概述】

    主要内容 JavaSpring[一.概述] JavaSpring[二.IOC] JavaSpring[三.Bean] JavaSpring[四.Bean管理注解实现] JavaSpring[五.AOP ...

  3. Spring AOP和AspectJ支持

    学了Spring之后发现我都不知道java为何物-- 在这一章中有好几节,讲的切面编程 第一节:在项目中启用Spring的AspectJ注解支持 第二节:用AspectJ注解声明aspect 第三节: ...

  4. spring(二) AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

  5. 开涛spring3(6.5) - AOP 之 6.5 AspectJ切入点语法详解

    6.5.1  Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的Aspect ...

  6. spring学习(二) ———— AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

  7. Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探

    由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...

  8. Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)

    一.概念 代理是什么呢?举个例子,一个公司是卖摄像头的,但公司不直接跟用户打交道,而是通过代理商跟用户打交道.如果:公司接口中有一个卖产品的方法,那么公司需要实现这个方法,而代理商也必须实现这个方法. ...

  9. spring AspectJ切入点语法详解 记录以便查阅

    AspectJ切入点语法详解 6.5.1  Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spri ...

随机推荐

  1. python md5验签

    import hashlib #api验签 参数按首字母排序,然后拼接clientid=123456&num=xxxx&status=1&timestamp=157319776 ...

  2. CockroachDB学习笔记——[译]Hello World

    原文链接:https://www.cockroachlabs.com/blog/hello-world/ 原作者:Spencer Kimball 原文日期:Jun 4, 2015 译:zifeiy 数 ...

  3. EKFiddle:基于Fiddler研究恶意流量的框架

    转载自FreeBuf.COM EKFiddle是一个基于Fiddler web debugger的,用于研究漏洞利用套件.恶意软件和恶意流量的框架. 安装 下载并安装最新版本的Fiddler http ...

  4. CF1187E Tree Painting

    思路: 树形dp,首先使用dp计算以1为根的时候的最大分数,同时得到各个子树i的最大分数dp[i].然后利用前面得到的dp数组分别计算以其他每个点作为根的时候的最大分数. 实现: #include & ...

  5. 【Qt开发】关于QWSServer

    QWS Server QT Embeded应用没有来严格的区分server和client进程,如果一个QT进程的启动参数中有-qws,那么这个进程就具有server管理功能,被称为QWS server ...

  6. thymeleaf如何遍历数据 each循环的使用

    首先在html开始标签中引入一个属性 xmlns:th="http://www.thymeleaf.org" 遍历数据示例 <tbody> <tr th:each ...

  7. 《C专家编程》读书笔记之第1~4章

    一.C:穿越时空的迷雾 1. C标准中定义了描述编译器的特点的一些术语: (1) 由编译器定义的(imprementation-defined) 由编译器设计者决定如何处理.例如:整型数右移时要不要扩 ...

  8. uva11624 Fire! (bfs预处理)

    题目链接:https://vjudge.net/problem/UVA-11624 题意:给一个1000×1000的矩阵,有几个着火点和Joe,着火点和Joe每个单位时间均移动一个单位,求Joe逃出的 ...

  9. 常见的几种web攻击

    1. SQL注入 2. OS命令注入 3. 跨站脚本攻击(XSS) 4. HTTP首部注入 5. 会话劫持 6. 跨站点请求伪造(CSRF) 7. 点击劫持 8. DoS

  10. 小白学PYTHON时最容易犯的6个错误

    最近又在跟之前的同学一起学习python,一起进步,发现很多测试同学在初学python的时候很容易犯一些错误,特意总结了一下.其实这些错误不仅是在学python时会碰到,在学习其他语言的时候也同样会碰 ...