深圳网站建设评价恒一信息深圳网站建设公司1

bicheng/2026/1/24 2:59:23/文章来源:
深圳网站建设评价,恒一信息深圳网站建设公司1,营销网站案例什么意思,一个网页目录 一、Spring AOP底层技术 二、初步实现AOP编程 三、获取切点详细信息 四、 切点表达式语法 五、重用#xff08;提取#xff09;切点表达式 一、Spring AOP底层技术 SpringAop的核心在于动态代理#xff0c;那么在SpringAop的底层的技术是依靠了什么技术呢#x… 目录 一、Spring AOP底层技术 二、初步实现AOP编程 三、获取切点详细信息 四、 切点表达式语法 五、重用提取切点表达式 一、Spring AOP底层技术 SpringAop的核心在于动态代理那么在SpringAop的底层的技术是依靠了什么技术呢 动态代理InvocationHandlerJDK原生的实现方式需要被代理的目标类必须实现接口。因为这个技术要求代理对象和目标对象实现同样的接口兄弟两个拜把子模式。cglib通过继承被代理的目标类实现代理所以不需要目标类实现接口。AspectJ早期的AOP实现的框架SpringAOP借用了AspectJ中的AOP注解。 二、初步实现AOP编程 2.1实现AOP需要以下注解 注解说明SpringJUnitConfig在JUnit测试类中使用Spring测试上下文配置Aspect将类标记为切面类定义切面逻辑和增强方法的位置EnableAspectJAutoProxy开启AspectJ自动代理用于启用Spring AOP的功能 2.2需要导入以下依赖 !-- 切面实现 --dependencygroupIdorg.springframework/groupIdartifactIdspring-aspects/artifactIdversion6.0.6/version /dependency !-- spring核心 --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.0.2.RELEASE/version/dependency !-- spring-test容器测试 --dependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion6.0.6/versionscopetest/scope/dependency 2.3 增强通知注解 注解说明Before在目标方法执行前执行的增强逻辑AfterReturning在目标方法成功返回后执行的增强逻辑AfterThrowing在目标方法抛出异常后执行的增强逻辑After在目标方法执行后执行的增强逻辑Around包裹目标方法在目标方法执行前后都可以执行自定义的增强逻辑 实现增强通知的步骤 定义方法存储增强代码使用注解配置指定插入目标的位置配置切点表达式选中插入的方法切点补全注解加入到ioc容器并且设置切面Aspect开启Aspect注解注释 案例代码 //4.补全注解 Component Aspect//1.创建增强类与增强方法start(),after,Error public class advice {// 2.使用注解配置配置插入位置Before After AfterThrowing // 3.配入切点表达式execution(* com.alphamilk.Impl.*.*(..))表明需要插入的方法为所有com.alhpamilk.Impl包下所有类的所有方法Before(execution(* com.alphamilk.Impl.*.*(..)))public void start(){System.out.println(方法起始处插入);}After(execution(* com.alphamilk.Impl.*.*(..)))public void after(){System.out.println(方法结束后插入);}AfterThrowing(execution(* com.alphamilk.Impl.*.*(..)))public void Error(){System.out.println(方法异常时候插入);} } ComponentScan(value com.alphamilk) Configuration //6.注解类中开启注解注释 EnableAspectJAutoProxy public class JavaConfig { }三、获取切点详细信息 虽然已经初步实现了AOP的实现但是还不够在调用多个方法时候如果都是输入调用方法前调用方法后等等这样并不能区分是调用了哪个方法所以为了区分我们需要获取调用这个方法的相关信息比如参数方法名返回值等等。 具体实现方式 通过JoinPoint接口的下面几个方法获取 方法说明getTarget()获取被代理的目标对象getClass()获取被代理的目标对象的类getSimpleName()获取被代理的目标对象的简单类名不含包名getArgs()获取方法参数数组getSignature()获取方法签名包括方法名、返回类型、参数类型等信息getModifiers()获取方法修饰符 有三个案例分别是一般情况需要返回值情况还有异常情况 一般情况前置通知、后置通知 案例代码 需要在方法调用中参数加入JoinPoint接口实例化对象用以创建对应的动态代理并通过动态代理获取对象相关信息。 public class advice {Before(execution(* com.alphamilk.*.*(..)))public void Before(JoinPoint joinPoint) { // 获取类名String simpleName joinPoint.getTarget().getClass().getSimpleName(); // 获取方法修饰符int modifiers joinPoint.getSignature().getModifiers();String Moidfier Modifier.toString(modifiers); // 获取方法名称String name joinPoint.getSignature().getName(); // 获取参数Object[] args joinPoint.getArgs(); //System.out.println(调用的方法是 name);System.out.println(调用的类是 simpleName);for (Object arg : args) {System.out.println(arg);}System.out.println(调用方法前);}After(execution(* com.alphamilk.*.*(..)))public void After(JoinPoint joinPoint) {System.out.println(调用方法后);} } 有返回值的情况返回通知 在一般情况的前提下还需要多增加Object result参数用以接收返回值.和注解增加returning输入确切的返回对象的名称。 案例代码 public class advice {AfterReturning(value execution(* com.alphamilk.*.*(..)),returning result)public void AfterReturning(JoinPoint joinPoint,Object result) {System.out.println(调用拥有返回值的方法);System.out.println(获取到的返回值为result);} } 异常情况异常通知 异常通知获取异常信息需要在一般情况的前提下在注解中多声明一个注解throwing在方法参数增加一个Throwable对象并且throwing注解对应的值就是Throwable的对象名称。 案例代码 AfterThrowing(value execution(* com.alphamilk.*.*(..)),throwing throwable)public void AfterThrowing(JoinPoint joinPoint,Throwable throwable) {System.out.println(调用有异常的方法);System.out.println(异常对象为throwable.getClass().getName());} SpringJUnitConfig(value JavaConfig.class) public class newaopTest {Autowiredprivate Caculate caculate;Testpublic void Test(){caculate.div(2,0);} } 四、 切点表达式语法 1.切点表达式作用 AOP切点表达式Pointcut Expression是一种用于指定切点的语言它可以通过定义匹配规则来选择需要被切入的目标对象。 2.切点表达式语法 具体值 (String, int)第一个参数是字符串第二个参数是整数。(int, String)第一个参数是整数第二个参数是字符串。()没有参数。 模糊值 (..)任意参数有或者没有。 部分具体和模糊 (String..)第一个参数是字符串后面可能有其他参数。(..String)最后一个参数是字符串前面可能有其他参数。(String..int)字符串开头最后一个参数是整数中间可能有其他参数。(..int..)包含整数类型的参数位置不限可能有其他参数。 具体实战案例 1.查询某包某类下访问修饰符是公有返回值是int的全部方法 execution public int 某包.某类.*(..) 2.查询某包下类中第一个参数是String的方法 execution * 某包.某类.*(String..) 3.查询全部包下无参数的方法 execution * *..*.*( ) 4.查询com包下以int参数类型结尾的方法 execution * com..*.*(..int) 5.查询指定包下Service开头类的私有返回值int的无参数方法 execution private int 指定包.Service*.*() 五、重用提取切点表达式 如果在每一个方法前都加上一个固定的切点表达式那么将会十分麻烦所以下面介绍切点表达式的重用 1.在当前类中提取 特定注解Pointcut 注解描述Pointcut声明切点表达式的方法用于定义切点的匹配规则。 通过定义一个空方法使用Pointcut注解并带上特定的切点表达式 案例代码 Component Aspect public class advice {/*定义空方法空方法上加上注解Pointcut并带上相应的切点表达式在其他增强方法上调用方法*/Pointcut(execution(* com.alphamilk.*.*(..)) )public void blank(){}Before(blank())public void Before(JoinPoint joinPoint) {System.out.println(调用方法前);}After(blank())public void After(JoinPoint joinPoint) {System.out.println(调用方法后);}AfterReturning(value blank(),returning result)public void AfterReturning(JoinPoint joinPoint,Object result) {System.out.println(调用拥有返回值的方法);}AfterThrowing(value blank(),throwing throwable)public void AfterThrowing(JoinPoint joinPoint,Throwable throwable) {System.out.println(调用有异常的方法);} } 2.创建一个存储切点类 推荐通过创建一个单独的存储切点的类更加容易进行维护表达式 使用时候加上特定类的方法名即可 案例 存储切点的类 Component public class MyPointcut {Pointcut(execution(* com.alphamilk.Impl.*.*(..)))public void pointcut1(){} } 对应引用类 Component Aspect public class advice {Before(com.alphamilk.Advice.MyPointcut.pointcut1())public void Before(JoinPoint joinPoint) {System.out.println(调用方法前);}After(com.alphamilk.Advice.MyPointcut.pointcut1())public void After(JoinPoint joinPoint) {System.out.println(调用方法后);}AfterReturning(value com.alphamilk.Advice.MyPointcut.pointcut1(),returning result)public void AfterReturning(JoinPoint joinPoint,Object result) {System.out.println(调用拥有返回值的方法);}AfterThrowing(value com.alphamilk.Advice.MyPointcut.pointcut1(),throwing throwable)public void AfterThrowing(JoinPoint joinPoint,Throwable throwable) {System.out.println(调用有异常的方法);} } 本章总结 1.SpringAop底层技术         了解底层代理技术有jdk 与 cglib 2.初步实现AOP编程         掌握增强注解Before、AfterReturning、AfterThrowing、After、Around         掌握Aspect注解的使用 3.获取切点详细信息         掌握如何通过JoinPoint接口对象获取对应方法的类方法名称参数方法修饰符         掌握三种不同情况下获取对应信息的情况一般情况、返回通知、异常通知 4.切点表达式语法         熟悉切点表达式的格式       execution 权限修饰 方法返回值类型方法所在全类名方法名称参数列表 5.重用提取切点表达式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一级 做爰免费网站app开发公司软件开发公司

展开运算符(Spread Operator)是ES6中引入的一种语法,使用三个连续的点(...)表示。它可以在多种场合下使用,主要用途是“展开”数组或对象中的元素或属性。 使用展开运算符的几种常见情景: 在函…

做章网站广东手机网站建设公司

austin-admin 消息推送平台前端项目🔥依赖低代码平台Amis 怎么使用 收到一个通知,要将部署一个开源的消息系统 :austin的前端开源:https://gitee.com/zhongfucheng/austin-admin 本地运行 1、使用npm或者yarn这些咯 yarn yarn start2、使用…

网上学做网站数字营销是什么

目录 1.背景2.基础二维数组概念二维数组定义方式 二维数组数组名称概念例子 函数的分文件编写概念示例 指针指针的基本概念指针变量的定义和使用 空指针和野指针空指针实例野指针实例 const修饰指针概念const修饰指针 --- 常量指针 指针和数组作用示例 指针和函数作用示例 指针…

兰州网站推广建设思途建站

该文章以及代码主要来自 图形学论文解析与复现:【论文复现】An Efficient Representation for Irradiance Environment Maps 作者:Monica的小甜甜 与原文的不同: 对一些有问题的地方进行了修改添加了注释对有疑问的地方添加了疑问点引入了其…

c2750服务器做网站行吗大型回合制手游排行榜

2.怎么鉴别程序是10.5还是10.51 ?* 作为商业用户,升级完全没有这个担心,但是这次升级从全局来看清晰度不是很高,不像10.5的升级后台UI都变化了!你说有漏洞但是我没遇到过 所以我也不知道升级了啥只能看版本数字是无法区…

个人网站建设论文中期报告简单网页模板下载

一、题目 1、题目描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例1: 输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-1…

做网站还挣钱吗辽宁网站建设fengyan

构建一种完全可实现、可操作的开放源代码信息收集系统,帮助记者完成工作任务。采编人员仅需输入所收集到的网址及题目即可迅速启动收集工作并进行信息归类。 2.根据新的数据收集要求,采用云计算技术实现新的收集器的迅速部署。对于资料采集点的改版&…

网站受到攻击会怎么样在线网页刷新

热点随笔: 是时候开始用C#快速开发移动应用了(腾飞(Jesse)) C#码农的大数据之路 - 使用C#编写MR作业(hystar) 人人网面试经历(少年张翠山) 数据库表设计,没有最好只有最…

在哪里可以学到做网站儿童产品网站建设

在实际生产开发中,我们都知道,DB是影响响应速度的主要原因之一,因此都会选择尽可能减少操作DB的次数,所以在批量操作数据库时,都会选择一些方式去尽可能优化。 一、实体类和mapper 实体类为: @Data public class User {private Long userId;private String name;priva…

软件自学网站中国建设信号工证网站

前言 本篇博客介绍在查看日志的场景中,grep管道命令的使用,并给出了具体的案例。 以下为Linux相关的博客文章列表: Linux——认识Linux的目录结构 & 常用命令 & vim命令 & 权限及其控制 & 防火墙命令 & 自定义命令 &a…

杭州做网站哪家最好怎么自己做投票网站

对于企业而言服务器至关重要,它几乎链接着企业的业务,也是员工业务沟通的桥梁,为了保持服务器稳定持续的工作,很多企业都很关心服务器双线的问题,相对来说现在大部分企业使用的都是服务器双线,那服务器双线…

网站建设论文文献海口cms模板建站

我们每入手一款开发板,一般配套的固件系统都会默认运行相应厂商定制的桌面环境(在一些桌面环境上定制的)。这个时候有些同学可能不喜欢厂商定制的桌面系统想要安装其他桌面系统比如我们虚拟机上常用的Ubuntu标准桌面系统(不建议因…

电子商务网站设计中影响客户体验的元素有wordpress底部排

目录 1.typedef对整型指针进行重命名 2.typedef对数组指针进行重命名 3.typedef对函数指针进行重命名 总结:所有重新命名的函数名必须写在*号旁边。 1.typedef对整型指针进行重命名 代码如下: typedef int* pint; int main() {int* p NULL;pint p…

贸易公司如何做英文网站邢台立享网络

前言 想弄一个跨服,目前这篇文章是边测试边写的,两个子服都是在同一个机器上运行的 如果两个子服在不同的网络,跨服的延迟就会比较高 两个子服 s1 和 s2 都是使用folia核心 版本1.20.1s1 端口: 25565s2 端口 : 25566 1.下载 Waterfall W…

怎么做化妆品网站内容规划品牌营销管理

用IIS 发布网站,不能访问且出现错误: HTTP 错误 401.3 - Unauthorized 由于Web服务器上此资源的访问控制列表(ACL)配置或加密设置。您无权查看此目录或页面 解决办法: 1.打开IIS界面,选中发布的网站,右键—>编辑…

个人怎么做ckmov解析网站哈尔滨seo

Redis 内核级请求处理流程 Redis Server 其实就是 Linux 服务器中的一个进程 主要还是下图的流程 应用先和 server 端建立 TCP 连接建立连接之后,server 端就会有一个与该客户端通信的 socket,客户端的读写请求发送到服务端的 socket那么通过 IO 多路…

湖北二师网站建设排名p2p系统网站开发

在迁移学习中,要使用预训练权重。在训练好的网络权重中,使用的是1000类的分类任务。而我们自己的分类任务中没有1000类,需要修改网络。如果将MobileNetV2(num_classes5),我们的网络在最后输出是5类,与1训练好的1000类不…

做教育网站制作链接的步骤

Mac 使用 U盘或移动固态硬盘制作可引导的安装器(以 Monterey 为例) 本教程参考 Apple 官网相关教程 创建可引导 Mac OS 安装器 重新安装 Mac OS 相关名词解释 磁盘分区会将其划分为多个单独的部分,称为分区。分区也称为容器,不同…

简约的网站设计依博罗阀门北京有限公司

前言 在面试中如果问TS的话,经常会问的一个问题就是interface和type有什么区别,这里做个记录 interface和type的区别 Interface 支持声明合并:如果你有两个相同名称的接口,TypeScript会合并它们 interface User {name: string…

没钱怎么做网站网站引流.

各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡spr…