AOP的功能,不改变源代码可以增强类中的方法      (增强 = 代理)

AOP切入点表达式:

execution([权限修饰符] [返回值类型] [类全路径] [方法名称] ([参数列表]))

例如:

@Before(value = "execution(* com.minelsg.User.add(..))")

连接点

在一个类中,哪些方法可以被增强,那这些方法就称为连接点

切入点

实际被真正增强的方法,称为切入点

通知(增强)

实际增强的逻辑部分称为通知(增强)。
通知有多种类型:前置通知、后置通知、环绕通知、异常通知、最终通知。
--------------------------------------------------------------------
#前置通知@Before:   方法之前会执行
#后置通知@AfterReturning: 方法之后会执行
#环绕通知@Around:   方法的前面和后面都会执行
#异常通知@AfterThrowing: 当方法出现异常会执行
#最终通知@After:   不管有没有异常都会执行类似于finally

切面

把通知应用到切入点的过程就称为切面

以下为实例:

被增强类

@Component
public class User {
public void add() {
System.out.println("add.......");
}
}

增强的类(代理类)

@Component
@Aspect //生成代理对象
public class UserProxy {
//前置通知
//@Before注解表示作为前置通知
@Before(value = "execution(* com.minelsg.User.add(..))")
public void before() {
System.out.println("before.....");
}
//执行后通知(最终通知)
@After(value = "execution(* com.minelsg.User.add(..))")
public void after(){
System.out.println("after......");
}
//执行后返回值通知
@AfterReturning(value = "execution(* com.minelsg.User.add(..))")
public void afterReturning(){
System.out.println("AfterReturning.........");
}
//@异常通知
@AfterThrowing(value = "execution(* com.minelsg.User.add(..))")
public void afterThrowing(){
System.out.println("AfterThrowing.........");
}
//@Around环绕通知
@Around(value = "execution(* com.minelsg.User.add(..))")
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
System.out.println("环绕之前........."); //add方法执行
proceedingJoinPoint.proceed(); System.out.println("环绕之后.........");
}
}

通过Ioc注入后执行

public class TestAop {
@Test
public void testAopAnno(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
User user = (User)context.getBean("user");
user.add();
}
}

输出结果

环绕之前.........
before.....
add.......
AfterReturning.........
after......
环绕之后.........

 done~~

Spring AOP实例操作 简单易懂的更多相关文章

  1. Spring Aop实例@Aspect、@Before、@AfterReturning@Around 注解方式配置

    用过spring框架进行开发的人,多多少少会使用过它的AOP功能,都知道有@Before.@Around和@After等advice.最近,为了实现项目中的输出日志和权限控制这两个需求,我也使用到了A ...

  2. Spring aop 实例(转)

    面向切面编程,有效的降低了代码之间的耦合性,易于维护:例如:我们习惯在代码中加上一些日志信息,在程序出错时方便快速查找找到问题,通常做法是在请求进入方法的时候打印日志,退出前打印日志,还有在出错时打印 ...

  3. Spring Boot -- Spring AOP原理及简单实现

    一.AOP基本概念 什么是AOP,AOP英语全名就是Aspect oriented programming,字面意思就是面向切面编程.面向切面的编程是对面向对象编程的补充,面向对象的编程核心模块是类, ...

  4. Spring AOP实例——异常处理和记录程序执行时间

    实例简介: 这个实例主要用于在一个系统的所有方法执行过程中出线异常时,把异常信息都记录下来,另外记录每个方法的执行时间. 用两个业务逻辑来说明上述功能,这两个业务逻辑首先使用Spring AOP的自动 ...

  5. Spring Aop实例

    一.XML方式 1. TestAspect:切面类 package com.spring.aop; import org.aspectj.lang.JoinPoint; import org.aspe ...

  6. Spring AOP就是这么简单啦

    前言 只有光头才能变强 上一篇已经讲解了Spring IOC知识点一网打尽!,这篇主要是讲解Spring的AOP模块~ 之前我已经写过一篇关于AOP的文章了,那篇把比较重要的知识点都讲解过了一篇啦:S ...

  7. Spring学习十四----------Spring AOP实例

    © 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...

  8. Spring AOP注解形式简单实现

    实现步骤: 1:导入类扫描的注解解析器 命名空间:xmlns:context="http://www.springframework.org/schema/context" xsi ...

  9. Spring学习(十六)----- Spring AOP实例(Pointcut(切点),Advisor)

    在上一个Spring AOP通知的例子,一个类的整个方法被自动拦截.但在大多数情况下,可能只需要一种方式来拦截一个或两个方法,这就是为什么引入'切入点'的原因.它允许你通过它的方法名来拦截方法.另外, ...

  10. Java框架spring 学习笔记(十二):aop实例操作

    使用aop需要在网上下载两个jar包: aopalliance.jar aspectjweaver.jar 为idea添加jar包,快捷键ctrl+shift+alt+s,打开添加jar包的对话框,将 ...

随机推荐

  1. SpringBoot项目使用yml文件链接数据库异常

    SpringBoot使用properties连接数据库时没有出现问题 SpringBoot使用yml连接数据库时出现:Unable to connect to Redis 并在报错信息中出现: 发现是 ...

  2. 填坑 CentOS7 使用 Python3 安装 Cython 编写扩展

    前文参见 <CentOS 7 下通过 Cython 编写 python 扩展>, 用的是 Python2.7,本文用的是 Python3.6 yum install python3 pyt ...

  3. USB gadget驱动框架(六)

    本节主要介绍udc驱动枚举过程,需结合udc驱动.composite.c.function等一同分析整个过程. udc驱动中断处理函数 当host检测到DP上拉,则认为有新的device插入,此时ho ...

  4. Pytorch 基于加权平滑过渡的无缝拼接

    基于加权平滑过渡的无缝拼接 背景 在做照片数字人视频生成的时候,为了达到快速响应实时播放的需求,即视频的生成速度 必须小于 音频的播放速度. 因此,我们截取了一部分较小的可动区域进行推理生成,然后把生 ...

  5. 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年6月刊

    本文为大家整理了墨天轮数据社区2023年6月发布的优质技术文章/文档,主题涵盖Oracle.MySQL.PostgreSQL等数据库的安装配置.故障处理.性能优化等日常实践操作,以及常用脚本.注意事项 ...

  6. 简述 JavaScript脚本的执行原理?

    js 是一种动态 . 弱类型 . 基于原型的语言 ,通过浏览器可以直接执行: 当浏览器遇到 <script></script>标记时 , 会执行标记之间的js 代码:然后js ...

  7. VM Ware 安装mac OS xxx 系统

    1. unlock 文件破解Vm Ware 默认不能安装苹果系统 :https://drive.google.com/file/d/1_AUeYh5JYltqjnuztQh-5UTomAIVBcLZ/ ...

  8. 017 Python 流程控制之 if 判断

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  9. 鸿蒙 NEXT 如何使用 @Styles 装饰器来优化我的组件代码?

    大家好,我是 V 哥.在鸿蒙 NEXT 开发中,@Styles 装饰器是一种非常有用的方法,用于定义可重用的样式.这使得开发者可以将多条样式设置提炼成一个方法,以便在多个组件中复用,从而提高代码的可维 ...

  10. Nuxt.js 应用中的 build:error 事件钩子详解

    title: Nuxt.js 应用中的 build:error 事件钩子详解 date: 2024/11/7 updated: 2024/11/7 author: cmdragon excerpt: ...