Spring AOP实例操作 简单易懂
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实例操作 简单易懂的更多相关文章
- Spring Aop实例@Aspect、@Before、@AfterReturning@Around 注解方式配置
用过spring框架进行开发的人,多多少少会使用过它的AOP功能,都知道有@Before.@Around和@After等advice.最近,为了实现项目中的输出日志和权限控制这两个需求,我也使用到了A ...
- Spring aop 实例(转)
面向切面编程,有效的降低了代码之间的耦合性,易于维护:例如:我们习惯在代码中加上一些日志信息,在程序出错时方便快速查找找到问题,通常做法是在请求进入方法的时候打印日志,退出前打印日志,还有在出错时打印 ...
- Spring Boot -- Spring AOP原理及简单实现
一.AOP基本概念 什么是AOP,AOP英语全名就是Aspect oriented programming,字面意思就是面向切面编程.面向切面的编程是对面向对象编程的补充,面向对象的编程核心模块是类, ...
- Spring AOP实例——异常处理和记录程序执行时间
实例简介: 这个实例主要用于在一个系统的所有方法执行过程中出线异常时,把异常信息都记录下来,另外记录每个方法的执行时间. 用两个业务逻辑来说明上述功能,这两个业务逻辑首先使用Spring AOP的自动 ...
- Spring Aop实例
一.XML方式 1. TestAspect:切面类 package com.spring.aop; import org.aspectj.lang.JoinPoint; import org.aspe ...
- Spring AOP就是这么简单啦
前言 只有光头才能变强 上一篇已经讲解了Spring IOC知识点一网打尽!,这篇主要是讲解Spring的AOP模块~ 之前我已经写过一篇关于AOP的文章了,那篇把比较重要的知识点都讲解过了一篇啦:S ...
- Spring学习十四----------Spring AOP实例
© 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...
- Spring AOP注解形式简单实现
实现步骤: 1:导入类扫描的注解解析器 命名空间:xmlns:context="http://www.springframework.org/schema/context" xsi ...
- Spring学习(十六)----- Spring AOP实例(Pointcut(切点),Advisor)
在上一个Spring AOP通知的例子,一个类的整个方法被自动拦截.但在大多数情况下,可能只需要一种方式来拦截一个或两个方法,这就是为什么引入'切入点'的原因.它允许你通过它的方法名来拦截方法.另外, ...
- Java框架spring 学习笔记(十二):aop实例操作
使用aop需要在网上下载两个jar包: aopalliance.jar aspectjweaver.jar 为idea添加jar包,快捷键ctrl+shift+alt+s,打开添加jar包的对话框,将 ...
随机推荐
- 将ASD光谱仪的.asd文件转为文本文件
本文介绍基于ViewSpec Pro软件,将ASD地物光谱仪获取到的.asd格式文件,批量转换为通用的.txt文本格式文件的方法. ASD光谱仪是英国Malvern Panalytical公司 ...
- /proc/slabinfo 介绍
slabinfo - version: 2.1 # name <active_objs> <num_objs> <objsize> <objperslab&g ...
- 2024年8月中国数据库排行榜:OceanBase攀升再夺冠,达梦跃入三甲关
在这个炽热的季节,随着巴黎奥运会的盛大开幕,全球将目光聚集在了体育的无限魅力和竞技的巅峰对决上.如同奥运赛场上的激烈角逐,中国数据库界也上演着一场技术与创新的较量,各个数据库产品正在中国乃至全球舞台上 ...
- iOS开发Block使用详解
项目开发中经常会用到页面之间传值的问题,常用的方法是通知.单例.代理.block等.最近项目忙完,有空细细研究了一下block的用法,收货多多. block又称闭包,它的实现原理是c语言的函数指针.函 ...
- AI之道|诺奖对AI的偏爱是真魔幻【悟空非空也】
一.背景 回归 2024 年诺贝尔物理学奖被授予 John J.Hopfield(霍普菲尔德) 和 Geoffrey E.Hinton(辛顿),当时物理学界都震惊了,纷纷在打听霍普菲尔德和辛顿,他们两 ...
- Python实现火柴人的设计与实现
1.引言 火柴人(Stick Figure)是一种极简风格的图形,通常由简单的线段和圆圈组成,却能生动地表达人物的姿态和动作.火柴人不仅广泛应用于动画.漫画和涂鸦中,还可以作为图形学.人工智能等领域的 ...
- mybatis相关-转义字符串报错-Cause: org.xml.sax.SAXParseException
mybatis相关-转义字符串报错-Cause: org.xml.sax.SAXParseException 部分报错信息 Caused by: org.springframework.beans.f ...
- ESP8266 + MQTT + 土壤湿度传感器
ESP8266 + MQTT + 土壤湿度传感器 连线 #include <Arduino.h> #include <Ticker.h> #include <ESP826 ...
- C++之OpenCV入门到提高003:矩阵的掩膜(Mask)处理
一.介绍 今天是这个系列<C++之 Opencv 入门到提高>得第三篇文章.今天这篇文章也不难,主要介绍如何使用 Opencv 对图像进行掩膜处理,提高图像的对比度.在这个过程中,我们可以 ...
- Codeforces 909 A-F
CF909 题解 题目链接 A B C D E F 难度:红 黄 绿 蓝 绿 紫 题解 A 题目翻译:给定两个字符串,求字典序最小的"两字符串非空前缀拼接形成的字符串". 算法标签 ...