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开发, ...
随机推荐
- 从零开始的SpringBoot项目 ( 三 ) 项目打包( war包篇 )
pom.xml 修改打包类型 jar 改为 war 添加 tomcat 依赖 找到最右边的 Maven Projects,点击进去,选择需要打包的项目,并点击 install,就开始打包了,打包前先点 ...
- 阿里巴巴Java开发手册1.4.0
链接:https://pan.baidu.com/s/16kKzcRcu20SMDdydMm9ZUw 提取码:p9ef
- 每天定时下载gfs资料shell脚本
在数值天气预报应用中,经常需要下载一些输入资料,美国ncep的gfs资料是常用的一种分析场资料.业务运行,需要每天定时从ncep网站上下载,所以写了一个Shell脚本实现这一功能.脚本内容如下: #! ...
- UNITY3D UGUI学习--canvas
首先从canvas的参数说起走. Canvas Component是UI布局和渲染的抽象空间,所有的UI元素都必须在此组件之下. Render Mode UI的渲染方式,有三种: Screen Spa ...
- 【jmespath】—1. 基础用法
一.jsonpath 之前我写接口自动化测试时候,对于复杂的json返回,会使用jsonpath这个第三方库,就像写xpath一样,方便的查询json元素. 因为之前写WEB自动化时候,总用xpath ...
- sqlserver语句的执行顺序
执行顺序: 1.from 2.where 3.group by 4.having 5.根据select 关键之后的要显示的字段,进行结果集显示 6.order by 对最终结果集进行排序 7.top/ ...
- Maven是什么? Maven的概念+作用+仓库的介绍+常用命令
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型.一组标准集合,一个依赖管理系统.和用来运行定义在生命周期阶段中插件目标和逻辑. 核心功能 Maven的核心 ...
- oracle之三手工不完全恢复
手工不完全恢复 4.1 不完全恢复的特点: 1)让整个database 回到过去某个时间点,不能避免数据丢失. 2)想跳过坏日志而继续恢复所有其他工作是不可能的,前滚没有这个功能(考点). 3)必须以 ...
- Robotframework自动化7-数据库连接
一.连接mysql数据库 1.安装pymysql: pip install pymysql pip install robotframework-databaselibrary 导入库Datab ...
- C/C++ 宏操作小技巧
Abstract 之前写了一个非常mini的log库(也不算库把,自己瞎jb写的),里面几乎都是宏的实现.这里打算趁热打铁,把自己知道的几下子都贴出来,后续如果有新的收获会更新这个博文. 文笔拙劣,主 ...