2024年10月24日第一部分AOP编程和自信

测试 



Spring通知(前置通知,后置通知,返回通知,异常通知,环绕通知)_前置通知后置通知环绕通知-CSDN博客

一、前置通知
--前置通知 : 在方法执行之前执行的通知
--前置通知使用 @Before 注解 , 并将切入点表达式的值作为注解值。
/**
 * 声明该方法是一个前置通知:在目标方法开始之前执行
 */
@Before ( "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" )
public void  beforeMethod ( JoinPoint  joinPoint ){
    System . out . println ( "调用" + joinPoint . getSignature () . getName () + "方法,处理" +  Arrays . asList ( joinPoint . getArgs ())) ;
}

二、后置通知
-- 后置通知是在连接点完成之后执行的 , 即连接点返回结果或者抛出异常的时候 , 下面的后置通知记录了方法的终止
/**
 * 在目标方法执行后(无论是否发生异常),执行的通知
 * 在后置通知中无法访问目标执行的结果
 */
@After ( "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" )
public void  afterMethod ( JoinPoint  joinPoint ){
    System . out . println ( "调用" + joinPoint . getSignature () . getName () + "方法结束" ) ;
}

三、返回通知
--在返回通知中, 只要将 returning属性添加到 @AfterReturning注解中, 就可以访问连接点的返回值. 该属性的值即为用来传入返回值的参数名称.
--必须在通知方法的签名中添加一个同名参数. 在运行时, Spring AOP 会通过这个参数传递返回值.
--原始的切点表达式需要出现在 pointcut 属性中
/**
 * 在方法正常结束的时候执行
 * 返回通知可以获取目标方法的返回值
 */
@AfterReturning (value  =  "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" , returning  =  "result" )
public void  afterReturningMethod ( JoinPoint  joinPoint , Override  result ){
    System . out . println ( "处理结果为:" + result . toString ()) ;
}

四、异常通知
--只在连接点抛出异常时才执行异常通知
--将 throwing 属性添加到 @AfterThrowing 注解中, 也可以访问连接点抛出的异常. Throwable是所有错误和异常类的超类. 所以在异常通知方法可以捕获到任何错误和异常.
--如果只对某种特殊的异常类型感兴趣, 可以将参数声明为其他异常的参数类型. 然后通知就只在抛出这个类型及其子类的异常时才被执行.
/**
 * 在目标方法出现异常时执行
 * 可以访问到方法的异常对象,且可以指定在出现特定异常时在执行通知代码
 */
@AfterThrowing (value  =  "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" ,throwing  =  "e" )
public void  afterThrowingMethod ( JoinPoint  joinPoint , Exception  e ){
    System . out . println ( joinPoint . getSignature () . getName () + "发生异常:" + e ) ;
}

五、环绕通知
--环绕通知是所有通知类型中功能最为强大的, 能够全面地控制连接点. 甚至可以控制是否执行连接点.
--对于环绕通知来说, 连接点的参数类型必须是 ProceedingJoinPoint. 它是 JoinPoint的子接口, 允许控制何时执行, 是否执行连接点.
--在环绕通知中需要明确调用 ProceedingJoinPoint 的 proceed() 方法来执行被代理的方法. 如果忘记这样做就会导致通知被执行了, 但目标方法没有被执行.
--注意: 环绕通知的方法需要返回目标方法执行之后的结果, 即调用 joinPoint.proceed(); 的返回值, 否则会出现空指针异常
/**
 * 环绕方法需要携带ProceedingJoinPoint类型的参数
 * 环绕通知类似于动态代理的过程,ProceedingJoinPoint类型的参数可以决定是否执行目标方法
 * 且环绕通知必须有返回值,返回值为目标方法的返回值
 */
@Around ( "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" )
public  Object  aroundMethod ( ProceedingJoinPoint  pjp ){
    Object  obj = null ;
    try  {
        //前置通知
        System . out . println ( "调用" + pjp . getSignature () . getName () + "方法,处理" +  Arrays . asList ( pjp . getArgs ())) ;
        //执行方法
        obj = pjp . proceed () ;
        //返回通知
        System . out . println ( "处理结果为:" + obj ) ;
    }  catch  ( Throwable  e ) {
        //异常通知
        System . out . println ( pjp . getSignature () . getName () + "发生异常:" + e ) ;
        //抛出异常
        throw new  RuntimeException ( e ) ;
    }
    //后置通知
    System . out . println ( "调用" + pjp . getSignature () . getName () + "方法结束" ) ;
    return  obj ;
}

【清空弹夹的美国《佛波乐》】 https://www.bilibili.com/video/BV1m2421L76U/?share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972

【全网首发黑马程序员鸿蒙 HarmonyOS NEXT星河版零基础入门到实战,零基础也能快速入门鸿蒙开发教程】 https://www.bilibili.com/video/BV14t421W7pA/?p=4&share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972

是啊谁不想满身肌肉遇到些小卡拉咪呢 还要担心没收住力道给对方送ICU了 男人不能坏但不能没有肌肉 心有猛虎细嗅蔷薇

太困了,先写个简单笔记 ① 代理模式强调代理类对真正办事儿的类的权限控制能力,装饰器强调对旧对象而不是旧类的功能扩展 ② 代理模式很常见,例如在编程语言级别的 C# Property,js 的 getter和setter...还有nginx做代理服务器 ③ 和中介者模式 访问者模式 有点像

佛波乐指的就是美国的FBI或者联邦调查局的公务人员。
“佛波勒”的说法也是源自于,FBI的前三个字母,用拼音来念的话,就音译为了“佛波勒”。这个词本身是没有什么梗和寓意的,主要就在音译的含义上,一方面是为了搞笑,另外一方面是为了避免视频被屏蔽。
fbl为什么叫佛波乐
因为FBI的前三个字母,用拼音来念的话,音译就是“佛波勒”,这其实是音译梗。 佛波勒是“FBI”在字母拼音中的一种读法。这个词语本身也没有任何的含义,主要就是一种音译

【【b站最全】140学姐,25考研数学全年规划,别瞎复习!|武忠祥张宇汤家凤李永乐】 https://www.bilibili.com/video/BV1Xx421y7Vs/?share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972

【未明子:弱小的人没有善良邪恶可言,你 不能 预设无产阶级是善良的】 https://www.bilibili.com/video/BV15M4m127LZ/?share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972

【有手机还需要录音笔吗?科大讯飞智能录音笔SR502体验报告】 https://www.bilibili.com/video/BV15i4y1S7KF/?share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972

现在二次元圈子已经成了很多赛博坤的名利场,她们摇身一变,从靠媚男擦边的网红模特,变成了资深二次元,走起了Cos路线。现在的B站二次元圈子,很多Coser都是之前的网红模特,又或是福利坤洗白上岸后必混的地方,其实也很好理解,与其赚穷哥们的钱不如搭上二刺猿的名头,荤菜素卖狠狠地爆阿宅的钱,这轻松又赚钱的买卖确实吸引人,遥想当年的C圈还是小众文化,但如今竟然成了如此这般的场景,居然还有一群舔狗备胎围着追捧这种货

笔记

webapp

1.创建新项目

1.老王编程 

 

 创建了一个文件包

2.spring

面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率 

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

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

相关文章

【2024CANN训练营第二季】使用华为云体验AscendC_Sample仓算子运行

环境介绍 NPU:Ascend910B2 环境准备 创建Notebook 华为云选择:【控制台】-【ModelArts】 ModelArts主页选择【开发生产】-【开发空间】-【Notebook】 页面右上角选择【创建Notebook】 选择资源 主要参数 规格:Ascend: 1*ascend-snt…

VS code部署Vue项目Demo

在之前已经在IDEA中部署过vue项目demo。本次在上次基础上进行。 IDEA中Vue的安装和使用【window10】_idea安装vue-CSDN博客 步骤一、安装VSCode 双击安装即可 步骤二:检查npm是否安装 步骤三:检查vue是否安装 (vue create 项目名 只要在v…

【AscendC算子开发】笔记1 算子开发哲学

重看这门课,有很多内容的认识更深了,做一些记录。 为什么不能将网络节点融合 这个问题关联到另一个问题:为什么我们需要激活函数? 使用线性的神经元堆叠得到的方程最后也是线性方程,无法表征非线性的信息&#xff0c…

微信网页授权回调地址放多个参数的方法

https://open.weixin.qq.com/connect/oauth2/authorize?appidAPPID&redirect_uriREDIRECT_URI&response_typecode&scopeSCOPE&stateSTATE#wechat_redirect 跳转后地址 redirect_uri/?codeCODE&stateSTATE。 redirect_uri如果不进行urlencode编码, 跳转后…

C++20中头文件syncstream的使用

<syncstream>是C20中新增加的头文件&#xff0c;提供了对同步输出流的支持&#xff0c;即在多个线程中可安全地进行输出操作&#xff0c;此头文件是Input/Output库的一部分。包括&#xff1a; 1.std::basic_syncbuf&#xff1a;是std::basic_streambuf的包装器(wrapper)&…

《在1688的数字海洋中,如何用API网罗一家店铺的所有商品?》

想象一下&#xff0c;你是一位船长&#xff0c;航行在1688这个电商的数字海洋上。你的任务是探索一家神秘的店铺岛屿&#xff0c;并且用你的API魔法网&#xff0c;网罗岛上所有的商品宝藏。不用担心&#xff0c;即使你不是海贼王&#xff0c;有了代码的力量&#xff0c;你也能成…

【数据结构初阶】二叉树---堆

二叉树-堆的实现 一、树的概念&#xff08;什么是树&#xff09;二、二叉树的概念及结构2.1 二叉树的概念2.2 二叉树的性质2.3 二叉树存储结构 三、二叉树的顺序结构3.1 堆的概念及结构3.2 堆的向下调整算法3.3堆的创建 四、堆的代码实现4.1 堆的初始化4.2 堆的销毁4.3 堆的插入…

ipguard与Ping32如何加密数据防止泄露?让企业信息更安全

在信息化时代&#xff0c;数据安全已成为企业运营的重中之重。数据泄露不仅会导致经济损失&#xff0c;还可能损害企业声誉。因此&#xff0c;选择合适的数据加密工具是保护企业敏感信息的关键。本文将对IPGuard与Ping32这两款加密软件进行探讨&#xff0c;了解它们如何有效加密…

SAP_SD模块-销售订单创建价格扩大10倍问题分析及后续订单价格批量更新问题处理

一、业务背景 我们公司的销售订单&#xff0c;是通过第三方销售管理平台创建好订单后&#xff0c;把表头和行项目数据&#xff0c;定时推送到SAP&#xff1b;SAP通过自定义表ZZT_ORDER_HEAD存放订单表头数据&#xff0c;通过ZZT_ORDER_DETAIL存放行项目数据&#xff1b;然后再用…

git安装-Tortoise git 安装汉化教程

1. 安装git 2. 安装git图形化工具Tortoise git 3. 汉化 Tortoise git 汉化安装包

证件照电子版怎么弄?不花钱制作方法快来学

想要制作免费照证件照&#xff1f;证件照在我们的日常生活中扮演着重要角色&#xff0c;无论是求职、求学还是办理各类证件&#xff0c;都少不了它的身影。 但是&#xff0c;去照相馆拍照不仅耗时&#xff0c;费用也不菲。那么&#xff0c;有没有可能不花一分钱就搞定证件照呢…

互联网系统的微观与宏观架构

互联网系统的架构设计&#xff0c;通常会根据项目的体量、业务场景以及技术需求被划分为微观架构&#xff08;Micro-Architecture&#xff09;和宏观架构&#xff08;Macro-Architecture&#xff09;。这两者的概念与职责既独立又相互关联。本文将通过一些系统案例&#xff0c;…

淘宝API的实战应用:数据驱动增长,实时监控商品信息是关键

数据驱动增长&#xff0c;实时监控商品信息是关键 —— 淘宝API的实战应用 在数字化时代&#xff0c;数据已经成为商业决策的核心。对于电商行业而言&#xff0c;获取准确、实时的数据是保持竞争力的关键。淘宝API接口作为连接淘宝电商平台与外部应用的桥梁&#xff0c;为电商商…

【论文+源码】基于spring boot的垃圾分类网站

创建一个基于Spring Boot的垃圾分类网站涉及多个步骤&#xff0c;包括环境搭建、项目创建、数据库设计、后端服务开发、前端页面设计等。下面我将引导您完成这个过程。 第一步&#xff1a;准备环境 确保您的开发环境中安装了以下工具&#xff1a; Java JDK 8 或更高版本Mav…

uv: 一个统一的Python包管理工具

uv是由Astral公司开发的一个极其快速的Python包管理器,完全用Rust编写。它最初在2月份发布,作为pip工作流的替代品。现在,uv已经扩展成为一个端到端的解决方案,可以管理Python项目、命令行工具、单文件脚本,甚至Python本身。可以说,uv就像是Python界的Cargo:一个快速、可靠、易…

Rust小练习,编写井字棋

画叉画圈的游戏通常指的是 井字棋&#xff08;Tic-Tac-Toe&#xff09;&#xff0c;是一个简单的两人游戏&#xff0c;规则如下&#xff1a; 游戏规则 棋盘&#xff1a;游戏在一个3x3的方格上进行。玩家&#xff1a;有两个玩家&#xff0c;一个用“X”表示&#xff0c;另一个…

Vivado自定义IP修改顶层后Port and Interface不更新解决方案

问题描述 在整个项目工程中&#xff0c;对自定义IP进行一个比较大的改动&#xff0c;新增了不少端口(这里具体的就是bram的读写端口)&#xff0c;修改是在block design中右击IP编辑在IP编辑工程中进行的。 在修改完所有代码后&#xff08;顶层新增了需要新加的输入输出端口&…

算法的学习笔记—平衡二叉树(牛客JZ79)

&#x1f600;前言 在数据结构中&#xff0c;二叉树是一种重要的树形结构。平衡二叉树是一种特殊的二叉树&#xff0c;其特性是任何节点的左右子树高度差的绝对值不超过1。本文将介绍如何判断一棵给定的二叉树是否为平衡二叉树&#xff0c;重点关注算法的时间复杂度和空间复杂度…

未来汽车驾驶还会有趣吗?车辆动力学系统简史

未来汽车驾驶还会有趣吗&#xff1f;车辆动力学系统简史 本篇文章来源&#xff1a;Schmidt, F., Knig, L. (2020). Will driving still be fun in the future? Vehicle dynamics systems through the ages. In: Pfeffer, P. (eds) 10th International Munich Chassis Symposiu…

sql-labs靶场第二十关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…