Spring5深入浅出篇:Spring动态代理详解

2024-04-17 21:44

本文主要是介绍Spring5深入浅出篇:Spring动态代理详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Spring5深入浅出篇:Spring动态代理详解

很多粉丝私信我这个Spring5的课程在哪看,这边是在B站免费观看欢迎大家投币支持一下.

视频地址

Spring动态代理详解

这篇主要介绍MethodBeforeAdvice,MethodInterceptor俩者在动态代理中起到的作用,并且详解俩者区别

额外功能的详解

  • MethodBeforeAdvice分析
1. MethodBeforeAdvice接⼝作⽤:额外功能运⾏在原始⽅法执⾏之前,进⾏额外功能
操作。
public class Before1 implements MethodBeforeAdvice {/*作⽤:需要把运⾏在原始⽅法执⾏之前运⾏的额外功能,书写在before⽅法中Method: 额外功能所增加给的那个原始⽅法login⽅法register⽅法showOrder⽅法Object[]: 额外功能所增加给的那个原始⽅法的参数。String name,String
passwordUserObject: 额外功能所增加给的那个原始对象 UserServiceImplOrderServiceImpl*/@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {System.out.println("-----new method before advice log------");}
}
2. before⽅法的3个参数在实战中,该如何使⽤。before⽅法的参数,在实战中,会根据需要进⾏使⽤,不⼀定都会⽤到,也有可能都不⽤。Servlet{service(HttpRequest request,HttpResponse response){request.getParameter("name") -->response.getWriter() --->}}
  • MethodInterceptor(⽅法拦截器)

methodinterceptor接⼝:额外功能可以根据需要运⾏在原始⽅法执⾏ 前、后、前后。

public class Arround implements MethodInterceptor {/*invoke⽅法的作⽤:额外功能书写在invoke额外功能 原始⽅法之前原始⽅法之后原始⽅法执⾏之前 之后确定:原始⽅法怎么运⾏参数:MethodInvocation (Method):额外功能所增加给的那个原始⽅法loginregisterinvocation.proceed() ---> login运⾏register运⾏返回值:Object: 原始⽅法的返回值Date convert(String name)*/@Overridepublic Object invoke(MethodInvocation invocation) throws
Throwable {System.out.println("-----额外功能 log----");Object ret = invocation.proceed();return ret;}
}

额外功能运⾏在原始⽅法执⾏之后

@Override
public Object invoke(MethodInvocation invocation) throws Throwable
{Object ret = invocation.proceed();System.out.println("-----额外功能运⾏在原始⽅法执⾏之后----");return ret;
}

额外功能运⾏在原始⽅法执⾏之前,之后

什么样的额外功能 运⾏在原始⽅法执⾏之前,之后都要添加?
事务
@Override
public Object invoke(MethodInvocation invocation) throws Throwable
{System.out.println("-----额外功能运⾏在原始⽅法执⾏之前----");Object ret = invocation.proceed();System.out.println("-----额外功能运⾏在原始⽅法执⾏之后----");return ret;
}

额外功能运⾏在原始⽅法抛出异常的时候

@Override
public Object invoke(MethodInvocation invocation) throws Throwable
{Object ret = null;try {ret = invocation.proceed();} catch (Throwable throwable) {System.out.println("-----原始⽅法抛出异常 执⾏的额外功能 ---- ");throwable.printStackTrace();}return ret;
}

MethodInterceptor影响原始⽅法的返回值

原始⽅法的返回值,直接作为invoke⽅法的返回值返回,MethodInterceptor不会影
响原始⽅法的返回值
MethodInterceptor影响原始⽅法的返回值
Invoke⽅法的返回值,不要直接返回原始⽅法的运⾏结果即可。
@Override
public Object invoke(MethodInvocation invocation) throws Throwable
{System.out.println("------log-----");Object ret = invocation.proceed();return false;
}

以上便是本文的全部内容,我是全干程序员demo,每天为你带来最新好用的开发运维工具,如果你觉得用,请点赞,让更多的人了解相关工具

如果你想了解更多关于全干程序员demo,还有更多付费工具免费破解如JB全家桶,可以关注公众号-全干程序员demo,后面文章会首先同步至公众号
在这里插入图片描述

这篇关于Spring5深入浅出篇:Spring动态代理详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

java如何解压zip压缩包

《java如何解压zip压缩包》:本文主要介绍java如何解压zip压缩包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解压zip压缩包实例代码结果如下总结java解压zip压缩包坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2