Spring 注解形式AOP
AOP 面向切面编程,通过预编译的方式,在运行期通过动态代理实现一种技术,AOP可实现业务与切面的逻辑分离,降低耦合度
一、注解形式的AOP
Aspect:切面
Joinpoint:连接点,要拦截的方法
Pointcut:切点,连接点的集合
Advice:通知,在连接点前后,或异常情况来做的事情。 前置通知,后置通知,返回通知,异常通知,环绕通知
Target:目标对象:代理的目标对象
Weave:织入,切面应用到目标对象,并创建Proxy的过程
1、导包:spring-aop spring-aspect aopalliance weaver
2、引入头信息:
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation=“http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"
3、基于注解方式的切面声明
<!-- 开启以注解形式切面的驱动 -->
<aop:aspectj-autoproxy/>
4、切面定义,创建一个类,上面加入@Aspect
1 @Aspect
2 public class PermAspect {
3 /**
4 * 第一个* 返回值类型
5 * 第二个* 所有类
6 * 第三个* 所有方法
7 * 第一个.. 包及其子包
8 * 第二个.. 所有参数
9 */
10 @Pointcut("execution(* com.tx.spring..*.*(..))")
11 public void anyMethod(){
12
13 }
14 }
5、前置通知
1 /**
2 * 前置通知
3 * anyMethod() 前置通知的切点
4 * args中的参数名,要与方法名中的参数名一致
5 */
6 @Before(value="anyMethod()&&args(user)")
7 public void preAdvice(User user){
8 System.out.println(user);
9 user.setUsername("张三");
10 System.out.println("执行前置通知");
11 System.out.println("---------------------");
12 }
6、后置通知
1 /**
2 * 后置通知
3 * anyMethod() 前置通知的切点
4 * args中的参数名,要与方法名中的参数名一致
5 */
6 @After(value="anyMethod()&&args(user)")
7 public void afterAdvice(User user){
8 System.out.println("---------------------");
9 System.out.println("执行后置通知");
10 }
7、返回通知
/**
* 返回通知,可以对业务方法的返回值进行统一加工
*/
@AfterReturning(value="anyMethod()",returning="user")
public void returnAdvice(User user){
System.out.println("------------");
user.setUsername("李四");
System.out.println("执行返回通知");
}
8、例外通知
/**
* 例外通知
* @param ex 抛出的异常
*/
@AfterThrowing(pointcut="anyMethod()",throwing="ex")
public void exceptionAdvice(Exception ex){
System.out.println("执行例外通知");
ex.printStackTrace();
}
9、环绕通知
/**
* 环绕通知
* @param jp 指定的连接点(要拦截的方法)
*/
@Around("anyMethod()")
public Object aroundAdvice(ProceedingJoinPoint jp){
Object[] argsArr = jp.getArgs();
System.out.println("环绕通知前-----参数是:"+argsArr[0]); Object obj = null;
try {
obj = jp.proceed();//执行要拦截的方法
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("环绕通知后-----");
return obj;
}
Spring 注解形式AOP的更多相关文章
- Spring注解(AOP)
底层动态代理 程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 导入aop的相关模块 <!-- https://mvnrepository.com/artifact/org. ...
- spring注解开发-AOP(含原理)
一:AOP基本使用 AOP指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式: 步骤一:导入aop模块:Spring AOP:(spring-aspects) <depen ...
- spring注解、aop(二)
使用注解配置spring 1.导入 spring-aop-5.0.6.RELEASE.jar包 2.为主配置文件引入新的命名空间 xmlns:context="http://www.spri ...
- spring注解实现AOP
项目结构图
- spring 注解 之 AOP基于@Aspect的AOP配置
Spring AOP面向切面编程,可以用来配置事务.做日志.权限验证.在用户请求时做一些处理等等.用@Aspect做一个切面,就可以直接实现. 1.首先定义一个切面类,加上@Component @A ...
- Spring注解配置Aop
之前学习了SpringAop的基本原理.http://www.cnblogs.com/expiator/p/7977975.html 现在尝试使用注解来配置SpringAop. Aop,面向切面编程. ...
- Spring注解式AOP面向切面编程.
1.AOP指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式.aop底层是动态代理. package com.bie.config; import org.aspectj.lan ...
- Spring 注解式Aop 入门
首先在spring配置文件中加上 xmlns:aop="http://www.springframework.org/schema/aop" http://www.springfr ...
- Spring注解开发系列专栏
这个系列主要是讲Spring注解的使用,可以为后面SpringBoot的学习带来一定的帮助.我觉得从Spring直接过度到SpringBoot还是有点快,还是得需要一个演变的过程.从Spring开发, ...
随机推荐
- nodejs打包成桌面程序(exe)的进阶之路
nodejs打包成桌面程序(exe)的进阶之路 node js bat 前端 计划任务 前言:最近的研究,请大佬们细品 第一篇 - 任务计划程序篇 说真的研究到将nodejs打包成可执行的exe文件是 ...
- Excel—TIME函数简介与用法
问题场景 算员工饱和度时,需要从实际考勤打卡时间中减去午休时间1.5个小时: 导出的时间时分秒是分开的,连接时分秒. 场景一 计算员工饱和度,需要减去午休时间,用下班打卡时间减去午休的1.5小时算出的 ...
- PyCharm 中文教程 01:运行 Python 的四种方式
<PyCharm 中文指南>在线阅读: http://pycharm.iswbm.com/ Github 项目主页: https://github.com/iswbm/pych... 1. ...
- 数字电路基础(三)TTL与非门输入端接电压表的示数
如下图所示,当ui输入低电平,电压表示数为0.3v,当ui输入高电平时,电压表示数为1.4v,分析如下 当ui=0.3 此时VT1导通,电流都从输入端流出,VT1的基极电位被钳位在1.0v(Ub1=0 ...
- Google谷歌在根据流量统计分析当年的2008年汶川大地震
这是一张2008年的老图,Google当时的博文说道:"当我们依照惯例整理和分析谷歌搜索引擎的流量数据时,一条从未见过的曲线出现在我们面前.当意识到发生了什么事情时,我们的眼睛湿润了.&qu ...
- android开发之java代码中如何获取到当前时间。详情代码带注释。
/** *获取当前时间 * @return */ public String getTime(){ Date date= new Date();//创建一个时间对象,获取到当前的时间 SimpleDa ...
- jumpserver如何在远程时使用复制粘贴-windwos系统下
jumpserver堡垒机搭建好了,但是在使用的时候,有时候会出现远程下不能复制粘贴,这让体验十分不爽. 于是着手解决这个问题,附上参考链接,感谢大佬:http://itren.xiaolee.net ...
- php中的加密解密模块-mcrypt
<?php /* 打开加密算法和模式 */ $td = mcrypt_module_open('rijndael-256', '', 'ofb', ''); /* 创建初始向量,并且检测密钥长度 ...
- 0vscode基本插件
Bracket Pair Colorizer auto-close-tag Auto Rename Tag Bracket Pair Colorizer Dracula ESLint Code Sp ...
- 关于Vuex的那些事儿
vuex vuex是一个专门为Vue.js应用程序开发的状态管理模式,集中式的存储应用的所有组件的状态 以相应的规则保证状态以一种可预测的方式发生变化 单向数据流 State:驱动应用的数据源(单向数 ...