关于@Around ,@After,@Before的详细解释

2 篇文章 0 订阅
订阅专栏

1. @Around的代码及图片详细解释代码含义

1.1@Around的代码,和参考输出顺序结果

package com.wqy.sport.friends.config;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Configuration;

/**
 @program: SportTime
 @project-name: SportTime
 @author: 王乾榆
 @description:
 @create: 2020-03-18 15:09:09 */
@Aspect  //@Aspect注解就是告诉spring 这是一个aop类,AOP切面
@Configuration //@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,
// 这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,
// 并用于构建bean定义,初始化Spring容器。
public class HandlerInterceptorEG {
    public static Integer i = 0;
    // 用@Pointcut来注解一个切入方法
    //@Pointcut注解 声明这是一个需要拦截的切面,也就是说,当调用任何一个controller方法的时候,都会激活这个aop
//    @Pointcut("execution(* com.wqy.sport.friends.controller.FriendsControllerEG.friendsAllMet(..))")
//    public void excudeService() {    。。。。。    }
    //@Around注解 环绕执行,就是在调用之前和调用之后,都会执行一定的逻辑
    @Around("execution(* com.wqy.sport.friends.controller.FriendsControllerEG.friendsAllMet(..))")
    public Object aroundMethod(ProceedingJoinPoint jointPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
        System.err.println("startTime = " + startTime);
        Thread.sleep(1000);//让主线程睡眠1秒,用于区分执行顺序,如果不睡眠则执行的时间相差太少,且打印顺序不是固定的,有一定的随机打印可能
       Object result = jointPoint.proceed();  //调用执行目标方法(result为目标方法执行结果),必须有此行代码才会执行目标调用的方法(等价于@befor+@after),否则只会执行一次之前的(等价于@before)
        Thread.sleep(1000);//让主线程睡眠1秒,用于区分执行顺序,如果不睡眠则执行的时间相差太少,且打印顺序不是固定的,有一定的随机打印可能
        long endTime = System.currentTimeMillis();
        System.err.println("endTime = " + endTime);
        return result;
    }
}

执行的结果

startTime = 1584520898864
2020-03-18 16:41:39.864  INFO 16440 --- [io-10002-exec-3] c.w.s.f.c.FriendsControllerEG            : 进入了1584520899864
2020-03-18 16:41:39.877  INFO 16440 --- [io-10002-exec-3] c.w.s.f.c.FriendsControllerEG            : 离开了1584520899877
endTime = 1584520900877

1.2@Around的图片详细解释代码含义

这是一个对代码进行了详细解释的图片,代码已经在上边附上
运行结果描述

@After和@Before的解释可以看图片中,用法跟@Around一样

Spring AOP切面执行顺序深度解析:@Before, @After, @Around的协同作战
fudaihb的博客
04-25 3631
Aspect-Oriented Programming(AOP)是一种编程范式,它旨在解决传统面向对象编程(OOP)中难以处理的问题,特别是那些横跨多个模块或层的横切关注点。这些关注点,如日志记录、事务管理和安全检查,通常散布在应用程序的多个部分中,导致代码重复和难以维护。AOP的核心思想是通过将这些横切关注点从业务逻辑中分离出来,封装成单独的模块,这些模块被称为“切面”(Aspect)。通过这种方式,我们可以将横切关注点的实现从核心业务逻辑中解耦,使得代码更加模块化、清晰和易于维护。
膜拜大牛!java开发面试简历
CHAMPION8888的博客
07-02 467
Java架构师成长笔记: 首先肯定是Java基础复习 SpringBoot快速上手 Web编程探索 SSM从入门到精通 1-3年高级工程师 微服务 并发编程进阶 深入Tomcat底层 JVM深度剖析 3-5年资深高级架构师 中间件&分布式 数据库 Spark 最后:学习总结——MyBtis知识脑图(纯手绘xmind文档) 学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后
javabefore和after的区别和用法
weixin_41098025的博客
07-16 124
Java中@Before和@After注解的区别和用法 作为一名刚入行的开发者,理解测试框架中的@Before和@After注解是非常重要的。这两个注解通常用于JUnit测试框架中,用于在测试方法执行前后执行一些特定的代码。下面我将通过一个简单的教程来教你如何使用这两个注解。 流程概览 首先,让我们通过一个表格来了解使用@...
Spring AOP @Before @Around @After 等 advice 的执行顺序
rainbow702的博客
08-11 11万+
Spring AOP 中 @Before @Around @After 等 advice 的执行顺序用过spring框架进行开发的人,多多少少会使用过它的AOP功能,都知道有@Before、@Around和@After等advice。最近,为了实现项目中的输出日志和权限控制这两个需求,我也使用到了AOP功能。我使用到了@Before、@Around这两个advice。但在,使用过程中,却对它们的执行
AspectJ 切面注解中五种通知注解:@Before、@After、@AfterReturning、@AfterThrowing、@Around
热门推荐
u010502101的博客
12-16 16万+
要在 Spring 中声明 AspectJ 切面, 只需要在 IOC 容器中将切面声明为 Bean 实例. 当在 Spring IOC 容器中初始化 AspectJ 切面之后, Spring IOC 容器就会为那些与 AspectJ 切面相匹配的 Bean 创建代理。 在切面类中需要定义切面方法用于响应响应的目标方法,切面方法即为通知方法,通知方法需要用注解标识,AspectJ 支持 5 种类型的
关于@Around、@Before、@After、@AfterReturning、@AfterThrowing执行顺序以及执行结果总结
weixin_38174052的博客
06-14 1万+
关于@Around、@Before、@After、@AfterReturning、@AfterThrowing执行顺序以及执行结果总结
Spring AOP @After,@Around,@Before执行的顺序以及可能遇到的问题
lmx125254的博客
11-23 6万+
AOP中有@Before,@After,@Around,@AfterRunning注解等等。 首先上下自己的代码,定义了切点的定义 @Aspect @Component public class LogApsect { private static final Logger logger = LoggerFactory.getLogger(LogApsect.class); ...
面试官:Spring 注解 @After,@Around,@Before 的执行顺序是?.zip
03-02
面试官:Spring 注解 @After,@Around,@Before 的执行顺序是?.zip 面试官:Spring 注解 @After,@Around,@Before 的执行顺序是?.zip 面试官:Spring 注解 @After,@Around,@Before 的执行顺序是?.zip 面试官:...
详述Spring AOP中的@Before,@After,@AfterReturning,@AfterThrowing和@Around
nairuozi的博客
03-05 5490
AOP的定义:AOP将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。 简单来说,就是将多个对象中的,非核心重复性高的代码单独封装,以供调用。 极大地提高了代码复用率,降低了...
spring AOP @Around @Before @After 区别
07-25 1268
spring AOP @Around @Before @After 区别 java程序员 发布于 2012年03月09日 14时, 6评/24677阅 分享到:  收藏 +22 踩 顶 2 此段小代码演示了spring aop中@Around @Before @After三个注解的区别 @Before是在所拦截方
详解Spring Aop实例@Around、@Before、@After、@AfterReturning 、@AfterThrowing注解方式配置以及注意事项
huluwa10526的博客
12-01 2499
用过spring框架进行开发的人,多多少少会使用过它的AOP功能,都知道有@Before、@Around和@After等advice。最近,为了实现项目中的输出日志和权限控制这两个需求,我也使用到了AOP功能。我使用到了@Before、@Around这两个advice。但在,使用过程中,却对它们的执行顺序并不清楚。为了弄清楚在不同情况下,这些advice到底是以怎么样的一个顺序进行执行的,我作了个测试,在此将其记录下来,以供以后查看。 前提 对于AOP相关类(aspect、pointcut等)的概念,
@Before @Around @After 等 advice 的执行顺序
ZERO
04-20 379
转载自:https://blog.csdn.net/rainbow702/article/details/52185827 在一个方法只被一个aspect类拦截时,aspect类内部的 advice 将按照以下的顺序进行执行: 正常情况: 异常情况: 当有多个aspect时,可以给aspect添加@Order注解值越小的 aspect 越先执行: ...
springBoot AOP @Before,@Around,@After,@AfterReturn,@AfterThrowing的理解
Crystalqy的博客
02-13 2万+
@Before,@Around,@After,@AfterReturn,@AfterThrowing的理解 连接点(Joinpoint) : 程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。——可以理解为被aop拦截的类或者方法就是连接点。 通知(Advice) : 通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个...
05 Spring Aop实例(AOP 如此简单)@Aspect、@Around 注解方式配置
赖赖的博客
12-14 1万+
转载请注明来源 赖赖的博客导语 没有什么是不可以改变的,换个角度看世界,截然不同! IoC相关的基本内容告一段落,本次介绍Spring的第二个特性,AOP,面向切面编程,术语听起来比较不容易理解,没关系,一切尽在实例中,让我们看一个简单的实例,就能明白。实例项目工程目录结构和代码获取地址获取地址(版本Log将会注明每一个版本对应的课程)https://github.com/laiyijie/Sp
Spring AOP @Before @Around @After等执行顺序
仙道Bob的专栏
06-04 5346
AOP基本概念 切面(Aspect):通知(advice)和切入点(pointcut)共同组成了切面(aspect) 切入点(Pointcut):切面切向哪里,某个类或者某一层包路径 通知(Advice):切面何时使用,即注有@Around、@Before、@After等注解的方法 情况一:一个方法只被一个Aspect类拦截 添加PointCut类 添加Aspect类 这两个可以放在一起 package com.bob.hello.aspect; import org.aspectj....
@Aspect @around 多个参数
weixin_33923762的博客
01-05 9001
2019独角兽企业重金招聘Python工程师标准>>> ...
Aop面向切面aspect,@Around @Before @After三个注解的区别
weixin_40974880的博客
12-26 3462
区别:@Before(前置通知Before advice)是在所拦截方法执行之前执行一段逻辑。 @After 后通知(After advice是在所拦截方法执行之后执行一段逻辑。 @Around 环绕通知(Around advice) 是可以同时在所拦截方法的前后执行一段逻辑,用这个注解的方法入参传的是ProceedingJionPoint pjp,可以决定当前线程能否进入核心方法中——通过调用p...
AOP的@Around、@Before、@After注解的执行顺序
weixin_44928443的博客
07-12 927
@Around、@Before、@After
@Around的执行流程,详细一点
最新发布
07-25
`@Around`是一种非常强大的Spring AOP(面向切面编程)注解,允许你编写环绕通知,这种通知可以在目标方法的执行前后插入额外的行为。在理解`@Around`的执行流程之前,首先需要理解几个基本概念: - **前置通知(`@Before`)**: 该通知在目标方法执行之前执行。 - **后置通知(`@After`)**: 当目标方法正常完成(无论是否抛出异常)之后执行。 - **最终通知(`@AfterThrowing`)**: 当目标方法抛出异常时执行。 - **环绕通知(`@Around`)**: 这是最复杂的类型,在目标方法执行前后插入自定义的行为,并有权选择是否继续执行目标方法或直接返回结果而不执行目标方法本身。 ### `@Around`执行流程详解: #### 执行阶段: 1. **获取连接点(Join Point)**:当切点匹配上时,系统会自动获得当前的连接点。连接点包含了目标方法及其上下文信息。 2. **执行前置通知 (`@Before`)**:如果`@Around`注解内包含前置通知,则在目标方法执行前立即执行这部分代码。 3. **执行目标方法**:接下来,系统执行目标方法的实际代码。这包括所有嵌套的方法调用等。 4. **决策是否执行目标方法**:这是`@Around`的核心部分。环绕通知可以控制目标方法是否执行下去。默认情况下,环绕通知会继续执行目标方法。但是,环绕通知可以根据需要在目标方法执行前后插入任意逻辑,并且有权限决定是否应该继续执行目标方法。这通常涉及调用`ProceedingJoinPoint.proceed()`方法。如果没有调用此方法或者返回的是`null`,则意味着不再执行目标方法。如果调用了`proceed()`并且传递了一个参数(即一个`Object`),那么这个参数将作为目标方法的返回值。 5. **执行后置通知 (`@After`) 或最终通知 (`@AfterThrowing`)**: - 如果目标方法成功执行完毕,那么将会执行`@After`通知。 - 如果目标方法执行过程中出现了异常,那么`@AfterThrowing`通知会被执行。 6. **结束流程**:无论目标方法是否被执行或是因异常而未执行,最终的后置通知都会执行。 ### 实际示例: 下面是一个简单的`@Around`使用示例,展示了如何在方法执行前后插入额外的逻辑: ```java import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect @Component public class LoggingAroundAdvice { @Around("execution(* com.example.*.*(..))") // 这里的切入点匹配所有com.example包下方法 public Object loggingAround(ProceedingJoinPoint pjp) throws Throwable { long start = System.currentTimeMillis(); // 前置通知 System.out.println("Before Method Execution"); try { // 获取实际方法并执行 Object result = pjp.proceed(); // 调用目标方法 // 后置通知 System.out.println("After Method Execution"); return result; // 返回目标方法的结果 } catch (Throwable e) { // 最终通知(这里仅处理异常) System.out.println("Error occurred during method execution: " + e.getMessage()); throw e; } finally { long end = System.currentTimeMillis(); System.out.println("Method took: " + (end - start) + " ms"); } } } ``` 在上述示例中,我们使用了`@Around`来包裹一个方法,并在其前后添加了日志输出。此外,我们还捕获了任何可能发生的异常,并在finally块中进行了处理。这种结构使得我们可以灵活地在目标方法执行前后插入各种逻辑,包括但不限于性能度量、错误处理、审计等。 --- ### 相关问题: 1. **如何在Spring中配置环绕通知?** - 主要是通过创建切面类并在其中使用`@Around`注解来配置环绕通知。 2. **为什么使用环绕通知而非前置或后置通知?** - 环绕通知提供了最大的灵活性,允许你在目标方法执行前和执行后插入任何代码,甚至决定是否执行目标方法本身,因此常用于复杂逻辑控制。 3. **如何有效地利用`ProceedingJoinPoint`?** - `ProceedingJoinPoint`提供了一种执行目标方法的机制,通过调用`proceed()`方法并将可能的返回值作为参数传递给下一个通知,可以实现灵活的AOP控制流管理。
写文章

热门文章

  • java接收不同的类对象(包含实体类)的公共方法 13303
  • oracle及oracle可视化工具安装教程 5856
  • 关于@Around ,@After,@Before的详细解释 4386
  • Oracle账号被锁定了?the account is locked?解决最多分3步! 3666
  • java自带的加密方式,md5,sha-256等 928

分类专栏

  • oracle 1篇
  • 数据库 5篇
  • linux 4篇
  • mysql 3篇
  • java代码优化 2篇
  • java加密 1篇
  • return 1篇

最新评论

  • oracle及oracle可视化工具安装教程

    yimiygk: plsql和sqldeveloper推荐用哪个呢

  • Linux mysql8.X实现互为主从详细配置以及离线安装并相关部署

    java码农007: 授予高级数据库权限,保证一定能够操作

  • Linux mysql8.X实现互为主从详细配置以及离线安装并相关部署

    weixin_37887179: mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; mysql> grant all on . to ‘slave’@’%’ ; 第二句是什么意思?

  • Linux mysql8.X离线安装并相关部署,以及实现互为主从详细配置

    泰山AI: 谢谢分享,大佬的文章让我受益颇多!

  • Linux mysql8.X离线安装并相关部署,以及实现互为主从详细配置

    java码农007: 加油,努力变成正经的不正经人!

最新文章

  • mysql优化
  • Oracle账号被锁定了?the account is locked?解决最多分3步!
  • sakila数据库
2022年1篇
2021年4篇
2020年5篇
2019年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家运动人物雕塑玻璃钢肇庆玻璃钢座椅雕塑厂家卡通形象玻璃钢雕塑玻璃钢主题人物雕塑如皋玻璃钢雕塑联系电话镜面不锈钢玻璃钢仿铜雕塑设计丹阳商场美陈制作玻璃钢警察卡通雕塑商场美陈布置实景河西圣诞商场美陈温州特色玻璃钢雕塑义乌卡通玻璃钢雕塑工艺广场玻璃钢雕塑口碑好嘉兴欧式玻璃钢雕塑优势卡通雕塑玻璃钢哪里的好广州组合式玻璃钢雕塑摆件商场中庭吊饰美陈订做福州步行街玻璃钢雕塑销售电话山东玻璃钢小羊动物雕塑厂家珠海市玻璃钢雕塑厂家玻璃钢雕塑商家电话重庆创意玻璃钢雕塑销售厂家南平模压法玻璃钢雕塑南宁广场玻璃钢雕塑定制江阴商场入口美陈定做玻璃钢鹿雕塑商业街雕塑手掌玻璃钢雕塑临沂玻璃钢企鹅雕塑批发玻璃钢花盆厂家直销河南公园玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化