JavaSpring【七、AspectJ】
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】的更多相关文章
- Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较
本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...
- JavaSpring【一、概述】
主要内容 JavaSpring[一.概述] JavaSpring[二.IOC] JavaSpring[三.Bean] JavaSpring[四.Bean管理注解实现] JavaSpring[五.AOP ...
- Spring AOP和AspectJ支持
学了Spring之后发现我都不知道java为何物-- 在这一章中有好几节,讲的切面编程 第一节:在项目中启用Spring的AspectJ注解支持 第二节:用AspectJ注解声明aspect 第三节: ...
- spring(二) AOP之AspectJ框架的使用
前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...
- 开涛spring3(6.5) - AOP 之 6.5 AspectJ切入点语法详解
6.5.1 Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的Aspect ...
- spring学习(二) ———— AOP之AspectJ框架的使用
前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...
- Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
一.概念 代理是什么呢?举个例子,一个公司是卖摄像头的,但公司不直接跟用户打交道,而是通过代理商跟用户打交道.如果:公司接口中有一个卖产品的方法,那么公司需要实现这个方法,而代理商也必须实现这个方法. ...
- spring AspectJ切入点语法详解 记录以便查阅
AspectJ切入点语法详解 6.5.1 Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spri ...
随机推荐
- kafka简单学习----遇到的问题
kafka启动消费者时总是显示disconnected.这是因为 producer client采用2.10.1.0版本,而kafka集群是2.10.0.0版本,不能兼容 解决方法如下:
- PAT 甲级 1026 Table Tennis (30 分)(坑点很多,逻辑较复杂,做了1天)
1026 Table Tennis (30 分) A table tennis club has N tables available to the public. The tables are ...
- Excel导入工具类
项目需要从Excel导入数据,然后插入到数据库对应表中.设计了一个导入工具类,导入数据和导入结果如下图示: poi jar版本采用的3.15 导入工具类实现如下: package com.alphaj ...
- 使用apache commons net进行ftp传输
apache commons net的maven地址: http://mvnrepository.com/artifact/commons-net/commons-net/3.6 <!-- ht ...
- linux下jdk环境的搭建
1.jdk的下载 2.linux centos7.2 64位下的安装和环境变量配置 1.jdk的下载 下载地址:https://www.oracle.com/technetwork/java/jav ...
- Python基础总结之初步认识---class类(中)。第十四天开始(新手可相互督促)
昨天简单的认识类怎么定义,什么是类,类如何调用.今天的笔记会大概补充一些内容,明天的笔记会细致讲解,加深个印象即可 今天我们在了解下:类的属性,类属性属于类也属于实例化对象.也就是说类的实例化对象可以 ...
- poj2947(高斯消元法解同余方程组)
题目链接:https://vjudge.net/problem/POJ-2065 题意:题目看着较复杂,实际上就是给了n个同余方程,解n个未知数. 思路:套高斯消元法的模板即可. AC代码: #inc ...
- Docker 安装 Python
查找Docker Hub上的python镜像 docker search python 拉取官方的镜像,标签为3.5 docker pull python:3.5 使用python镜像 创建目录pyt ...
- vue中可以自定义动画的前缀
vue中可以自定义动画的前缀1.只需在中加入name属性即可 <transition name="my"> <h6 v-if="flag2"& ...
- Ajax的使用及后台如何传参
Ajax的使用(此处为表单序列化方式) $.ajax({ type: 'post', data: $('#newPriorityForm').serialize(), dataType: 'json' ...