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. SecureCRT 关键字高亮显示

    grep命令红色高亮关键字 1.  左边侧栏 Session Manage 右键Sessions --Properties 2 Terminal--Appearance Current color s ...

  2. 都2020年了,还再问GET和POST的区别?【深度好文】

    最近看了一些同学的面经,发现无论什么技术岗位,还是会问到 get 和 post 的区别,而搜索出来的答案并不能让我们装得一手好逼,那就让我们从 HTTP 报文的角度来撸一波,从而搞明白他们的区别. 一 ...

  3. 没想到,Git居然有3种“后悔药”!

    没想到,Git居然有后悔药! 你知道Git版本控制系统中都有哪些"后悔药"吗? 本文通过案例讲解git reset . git revert . git checkout在版本控制 ...

  4. AndroidStudio修改程序的包名,可以修改com.example.xxx之类的详解

    转载请说明出处.原创作品. 首先说明一下,当时公司需要修改androidStudio 项目的包名 于是上网查了一下,只看到了修改后面的包名,而不可以修改 前缀的com.example.xxx.所以很无 ...

  5. P4719 【模板】"动态 DP"&动态树分治

    题目描述 给定一棵 n 个点的树,点带点权. 有 m 次操作,每次操作给定 x,y,表示修改点 x 的权值为 y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 输入格式 第一行有两个整数 ...

  6. Kernel_task占CPU问题

    彻底解决高版本 mac Kernel_task占CPU问题 https://blog.csdn.net/liumx2007/article/details/77164795

  7. HDU-多校2-Everything Is Generated In Equal Probability(公式+逆元)

    Problem Description One day, Y_UME got an integer N and an interesting program which is shown below: ...

  8. java初探(1)之秒杀的业务简单实现

    前言 秒杀的业务场景广泛存在于电商当中,即有一个倒计时的时间限制,当倒计时为0时,秒杀开始,秒杀之后持续很小的一段时间,而且秒杀的商品很少,因此会有大量的顾客进行购买,会产生很大的并发量,从而创造技术 ...

  9. 【IDEA】【SpringBoot】基于idea对springboot程序远程调试

    一.开启远程调试前提:本地代码与服务器代码一致(实测:不关键的代码稍微有点不一样好像也不会有多大问题). 二.开启远程调试步骤 1.开发工具配置 idea端打开Edit configurations, ...

  10. Agumater 爬虫进度带上了百分比,消除了.0