3.4 SpringAOP之通知获取数据

2024-06-20 22:20

本文主要是介绍3.4 SpringAOP之通知获取数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.JoinPoint和ProceedingJoinPoint接口

接口定义功能适用通知类型
JoinPoint代表了在程序执行过程中的连接点获取到连接点(被拦截方法)的名称、参数、目标对象以及代理对象等信息前置、后置、返回后、抛出异常后通知
ProceedingJoinPoint是 JoinPoint 接口的子接口,除了继承了 JoinPoint 的所有功能外,还增加了一个非常关键的方法 proceed()通过 proceed() 方法,可以决定是否继续执行被拦截的方法以及如何执行环绕通知

2.通知获取数据分类

分类适用通知类型
获取参数前置、后置、环绕、返回后、抛出异常后通知
获取切入点方法返回值环绕、返回后通知
获取切入点方法运行异常信息环绕、抛出异常后通知

3.获取参数

(1)前置、后置、返回后、抛出异常后通知

    @Before("切入点方法名()")public void advice(JoinPoint jp) {// 获取切入点方法参数Object[] args = jp.getArgs();}

(2)适用于环绕通知

  	@Around("切入点方法名()")public Object advice(ProceedingJoinPoint pjp) throws Throwable {// 获取切入点方法参数Object[] args = pjp.getArgs();}

4.获取返回值

(1)环绕通知

	@Around("切入点方法名()")public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {// 对原始操作的调用,并接收其返回值Object proceed = pjp.proceed();return proceed;}

(2)返回后通知
注:如果返回后通知同时获取参数和返回值,通知的形参必须是JoinPoint形参在前,接收返回值的形参在后

	@AfterReturning(value = "切入点方法名()" ,returning = "ret(通知方法中用来接收返回值的形参名)")public void afterReturning(Object ret) {System.out.println("返回后通知获取切入点方法返回值:" + ret);}

5.获取异常

(1)环绕通知

    @Around("切入点方法名()")public Object aroundAdvice(ProceedingJoinPoint pjp) {Object proceed = null;try {proceed = pjp.proceed();} catch (Throwable e) {e.printStackTrace();}return proceed;}

(2)抛出异常后通知

 	@AfterThrowing(value = "切入点方法名()", throwing = "e(通知方法中用来接收异常的形参名)")public void afterThrowing(Throwable e){e.printStackTrace();}

这篇关于3.4 SpringAOP之通知获取数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079415

相关文章

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

springAOP 和 aspectJ 有什么区别

介绍 如今有多个可用的AOP库,这些组件需要回答一系列的问题: 是否与我现有的应用兼容?我在哪实现AOP?集成到我的应用是否很快?性能开销是多少? 本文中,我们将会着重回答这些问题,并介绍两款Java最流行的AOP框架:Spring AOP 和 AspectJ。 AOP概念 在我们开始之前,让我们对术语和核心概念做一个快速,高水平的回顾: Aspect切面:一个分布在应用程序中多个位置

AOP之执行前通知@Before

Spring AOP之执行前通知@Before 此文章说一下执行前通知,即注解@Before。 作用 多用于日志记录、权限校验、初始化资源等。 触发时间 目标函数执行触发。 定义 public class AopBeforeAspect {@Before("execution(public * com.example.demo.service.impl.AccountServiceI

ajax xmlhttprequest使用post传参数并向后台获取数据

ajax xmlhttprequest向后台传数据有两种方式,一种是直接在地址URL后面加入参数,后台用Request.QueryString来获取,另外一种是采用POST来传,send方法发送参数对,比如send("a=3&b=4"),后台用Request.Form[“a”]来获取3,同理Request.Form["b"]获取4   前台代码: <%@ Page Titl

安卓8.0通知栏适配

一、谷歌为什么在安卓8.0对通知栏进行修改         系统通知栏作为除桌面启动图标之外的唯一入口,对app的日活起到非常重要的作用,因此各个app开发商都希望能抢占用户的通知栏。随着移动端的普及和安卓手机存储容量的扩大,用户手机能安装的app数量越来越多,一台手机安装几十到上百个app已经不足为奇,各个app都极尽可能的抢占通知栏,而安卓系统本身又没有一种规范来约束app开发商的这种行为,

ubuntu —— 命令行执行完毕通知(undistract-me)

当我们在命令行下:   (1)git clone 一个项目时(2)sudo apt-get install 时(3)sudo make 时。。。 往往要经历比较长的时间等待,一方面我们不能盲等,时间白白流失,我们需要转而去做其他事情,另一方面,我们有不确定方才的任务是否执行完毕,我们会时不时的去查看下该命令是否执行完毕了(类似计算机中的轮循机制),这样效率比较低,饱受 distract(分心

Notification PendingIntent失效,每个通知都响应第一个PendingIntent

1、bug描述 可生成多个通知,但通知生成后,点击均响应第一个通知对应的PendingIntent。 但之前是可以正常使用的。 2、可能原因 期间,对AndroidStudio进行升级到3.2.1,buildToolsVersion更新到28.0.3。 并没有其他的额外涉及通知的操作,所以可能的原因是build更新,使得PendingIntent.getActivity的第2个和第4个参数重新起作

app版本更新,通知形式显示安装包下载进度

也是公司的项目需要,就稍微研究了下,参考网上一些不错的思路,但其适用版本都比较早,所以通知做了适配了Android 8.0,及权限问题等问题。 原理;下载apk过程中,发起一个通知,并不断发起最新进度的相同ID的通知,覆盖上一个通知,达到显示当前下载进度的效果。 demo已上传:https://download.csdn.net/download/u013370255/10603681 下面

通知Notification(可展开的大布局)使用,适配android8.0

补充修正: 2018-11-07 问题:Notification PendingIntent失效,每个通知都响应第一个PendingIntent https://blog.csdn.net/u013370255/article/details/83791750 2018-08-16 问题:app版本更新,通知形式显示安装包下载进度 https://blog.csdn.net/u01337025