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的更多相关文章

  1. Spring注解(AOP)

    底层动态代理 程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 导入aop的相关模块 <!-- https://mvnrepository.com/artifact/org. ...

  2. spring注解开发-AOP(含原理)

    一:AOP基本使用 AOP指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式: 步骤一:导入aop模块:Spring AOP:(spring-aspects) <depen ...

  3. spring注解、aop(二)

    使用注解配置spring 1.导入 spring-aop-5.0.6.RELEASE.jar包 2.为主配置文件引入新的命名空间 xmlns:context="http://www.spri ...

  4. spring注解实现AOP

    项目结构图

  5. spring 注解 之 AOP基于@Aspect的AOP配置

    Spring AOP面向切面编程,可以用来配置事务.做日志.权限验证.在用户请求时做一些处理等等.用@Aspect做一个切面,就可以直接实现. 1.首先定义一个切面类,加上@Component  @A ...

  6. Spring注解配置Aop

    之前学习了SpringAop的基本原理.http://www.cnblogs.com/expiator/p/7977975.html 现在尝试使用注解来配置SpringAop. Aop,面向切面编程. ...

  7. Spring注解式AOP面向切面编程.

    1.AOP指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式.aop底层是动态代理. package com.bie.config; import org.aspectj.lan ...

  8. Spring 注解式Aop 入门

    首先在spring配置文件中加上 xmlns:aop="http://www.springframework.org/schema/aop" http://www.springfr ...

  9. Spring注解开发系列专栏

    这个系列主要是讲Spring注解的使用,可以为后面SpringBoot的学习带来一定的帮助.我觉得从Spring直接过度到SpringBoot还是有点快,还是得需要一个演变的过程.从Spring开发, ...

随机推荐

  1. typepra快捷键

  2. python3+pyqt5+opencv3简单使用

    python3+pyqt5+opencv3简单使用(转载) 关于python3下搭建pyqt5(pycharm)参考这条链接. 对于pyqt的使用个人比较建议ui设计与逻辑功能分开开发. 下面介绍下简 ...

  3. WPF新手快速入门系列 2.绑定

    [概要] 上一章讲了布局,按照市面上的书籍每一本讲的顺序都不一样,本系列是希望大家能快速上手去应对工作需要,所以本章就直接开始讲绑定. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:58074 ...

  4. 总结一篇shell调试技巧及常见的脚本错误

      #常见的调试命令工具 1.使用bash命令参数调试 #使用 [root@game ~]# sh [-xvn] test.sh #参数解释: -x:将执行的脚本内容输出出来,可以看到执行的过程 -n ...

  5. 据说是最好的记忆工具——Anki

    http://www.ankichina.net/ .u1s1,确实挺好用,自建题库,全程自助. 可以插入文字.图片.音频,会安排合理的复习频率,可以随时同步,电脑手机版本全.

  6. zabbix-4.0-监控服务器的ping告警设置

    问题:一直在困惑如果一台服务器的网络发生故障或者断开时,怎么第一时间发现并去排查. 思路:利用zabbix平台监控服务器,监控ping这一项,设置一个报警,并使用脚本去提醒与通知,可使用邮件报警/短信 ...

  7. B - The Staircases (dp)

    One curious child has a set of N little bricks. From these bricks he builds different staircases. St ...

  8. or2?Scum!(周期性求解)

    链接:https://ac.nowcoder.com/acm/contest/316/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言2621 ...

  9. css实例——“旋转”太极八卦图

    话不多说,直接上代码: HTML代码部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...

  10. 剑指 Offer 55 - I. 二叉树的深度

    题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 例如: 给定二叉树 [3,9,20,null,null,15 ...