Java中面向切面编程@Around注解

一、@Around注解

在Java中,@Around注解是AspectJ框架中的一个切面注解,用于定义环绕通知(around advice)。

具体来说,@Around注解可以应用在切面类的方法上,用于包围目标方法的执行。当被@Around注解修饰的方法被调用时,它会在目标方法执行前和执行后拦截处理。

@Around注解的主要作用是在目标方法的执行前后进行一些额外的操作,例如日志记录、性能监控、多数据源动态切换、事务管理等。

下面是一个使用@Around注解的示例:

javaCopy Code@Aspect
@Component
public class LoggingAspect {

    @Around("execution(* com.example.MyService.*(..))")
    public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
        // 在目标方法执行前的操作
        System.out.println("Before method execution");

        // 执行目标方法
        Object result = joinPoint.proceed();

        // 在目标方法执行后的操作
        System.out.println("After method execution");

        return result;
    }
}
javaCopy Code@Aspect
@Component
public class LoggingAspect {

    @Around("@annotation(logPrint)")
    public Object around(ProceedingJoinPoint proceedingJoinPoint, LogPrint logPrint) throws Throwable {
        // 在目标方法执行前的操作
        System.out.println("Before method execution");

        // 执行目标方法
        Object result = joinPoint.proceed();

        // 在目标方法执行后的操作
        System.out.println("After method execution");

        return result;
    }
}

上述代码定义了一个切面类LoggingAspect,其中的方法aroundAdvice@Around注解修饰。该方法使用ProceedingJoinPoint参数表示目标方法的执行点,通过调用proceed()方法来触发目标方法的执行。

在方法体内,可以在目标方法执行前后分别添加自定义的操作逻辑。例如,在目标方法执行前打印日志,在目标方法执行后进行清理工作等。

需要注意的是,@Around注解的方法必须返回一个对象,该对象可以是目标方法的返回值,也可以是经过修改后的返回值。

二、切面类

是AOP编程中的一个重要概念,它用于定义切面(Aspect),即横切关注点的模块化单元。切面类通过指定切入点和通知来实现对目标方法的拦截和处理。

  1. 切面类的注解:在Java中,切面类需要使用特定的注解来标识。常用的切面注解有@Aspect@Component@Aspect注解表示该类是一个切面类,而@Component注解表示该类是一个Spring组件,可以被自动扫描和加载。

  2. 切入点表达式(Pointcut Expression):切入点表达式用于定义切面生效的位置,即目标方法的选择条件。常用的切入点表达式可以基于方法、类、包等进行定义,用于确定哪些方法将被拦截和处理。

  3. 通知(Advice):通知定义了在目标方法的执行前、后或发生异常时所执行的操作。常见的通知类型包括前置通知(@Before)、后置通知(@AfterReturning)、异常通知(@AfterThrowing)和环绕通知(@Around)等。通知方法可以在切面类中定义,并利用注解来指定切入点和具体的操作逻辑。

  4. 连接点(Join Point):连接点表示程序执行过程中的一个特定位置,通常是方法的调用或异常抛出等。切入点可以理解为连接点的集合。

  5. 切面织入(Aspect Weaving):切面织入是指将切面应用到目标方法上的过程。在Spring AOP中,织入可以通过编译期间的AspectJ编织、运行期间的动态代理和加载时期的字节码增强等方式实现。

总体来说,切面类是一个带有特殊注解的Java类,用于定义切面逻辑和操作。它通过切入点表达式选择目标方法,然后通过通知定义拦截和处理逻辑,最终将切面织入到目标方法中,实现对应的横切关注点功能。切面类是AOP编程的核心之一,可以在项目中实现日志记录、性能监控、事务管理等通用的横切关注点。

三、AOP:

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,用于将横切关注点与核心业务逻辑分离,以提高代码的模块性、可维护性和复用性。它通过在程序运行时动态地将代码片段插入到已有的代码中,从而实现对横切关注点的拦截和处理。

AOP能够带来许多好处,例如:

  1. 横切关注点的复用:通过切面可以将相同的横切功能应用于多个模块,避免了重复编写代码的问题。
  2. 模块化开发:将横切关注点与核心逻辑分离,使系统更易于维护和扩展。
  3. 提高可读性:通过将横切关注点集中在切面中,使核心逻辑更加清晰和易于理解。
  4. 高层次的抽象:AOP提供了一种高层次的抽象方式,使开发人员能够更专注于业务需求而不是技术细节。

总之,AOP是一种强大的编程范式,它通过将横切关注点从核心业务逻辑中解耦出来,提供了一种灵活的方式来处理和管理横切功能,从而提高了代码的模块化程度和可维护性。

本文作者:Journey&Flower

本文链接:https://www.cnblogs.com/JourneyOfFlower/p/17648156.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Journey&Flower  阅读(678)  评论(0编辑  收藏  举报
历史上的今天:
2018-08-22 C#通过SendARP()获取WinCE设备的Mac网卡物理地址
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示
  1. 1 404 Not Found REOL
  2. 2 白色恋人 游鸿明
  3. 3 盛夏的果实 莫文蔚
  4. 4 以父之名 周杰伦
  5. 5 晴天 周杰伦
  6. 6 简单爱 周杰伦
  7. 7 东风破 周杰伦
  8. 8 稻香 周杰伦
  9. 9 爱在西元前 周杰伦
  10. 10 千里之外 费玉清-周杰伦
  11. 11 偏爱 张芸京
  12. 12 大海 张雨生
  13. 13 月亮惹的祸 张宇
  14. 14 雨一直下 张宇
  15. 15 过火 张信哲
  16. 16 隐形的翅膀 张韶涵
  17. 17 天下 张杰
  18. 18 当你孤单你会想起谁 张栋梁
  19. 19 清明雨上 许嵩
  20. 20 玫瑰花的葬礼 许嵩
  21. 21 断桥残雪 许嵩
  22. 22 城府 许嵩
  23. 23 等一分钟 徐誉滕
  24. 24 客官不可以 徐良_小凌
  25. 25 坏女孩 徐良_小凌
  26. 26 犯贱 徐良
  27. 27 菠萝菠萝蜜 谢娜
  28. 28 贝多芬的悲伤 萧风
  29. 29 睫毛弯弯 王心凌
  30. 30 我不是黄蓉 王蓉
  31. 31 秋天不回来 王强
  32. 32 今天你要嫁给我 陶喆,蔡依林
  33. 33 丁香花 唐磊
  34. 34 绿光 孙燕姿
  35. 35 求佛 誓言
  36. 36 十一年 邱永传
  37. 37 下辈子如果我还记得你 马郁
  38. 38 一千年以后 林俊杰
  39. 39 江南 林俊杰
  40. 40 曹操 林俊杰
  41. 41 背对背拥抱 林俊杰
  42. 42 会呼吸的痛 梁静茹
  43. 43 勇气 梁静茹
  44. 44 爱你不是两三天 梁静茹
  45. 45 红日 李克勤
  46. 46 星月神话 金莎
  47. 47 嘻唰唰 花儿乐队
  48. 48 穷开心 花儿乐队
  49. 49 六月的雨-《仙剑奇侠传》电视剧插曲 胡歌
  50. 50 一个人的寂寞两个人的错 贺一航
  51. 51 好想好想-《情深深雨濛濛》电视剧片尾曲 古巨基
  52. 52 情人 刀郎
  53. 53 冲动的惩罚 刀郎
  54. 54 西海情歌 刀郎
  55. 55 2002年的第一场雪 刀郎
  56. 56 红玫瑰 陈奕迅
  57. 57 浮夸 陈奕迅
  58. 58 爱情转移 陈奕迅
  59. 59 独家记忆 陈小春
  60. 60 记事本 陈慧琳
  61. 61 看我72变 蔡依林
  62. 62 寂寞在唱歌 阿桑
  63. 63 樱花草 Sweety
  64. 64 中国话 S.H.E
  65. 65 波斯猫 S.H.E
  66. 66 杀破狼-《仙剑奇侠传》电视剧片头曲 JS
  67. 67 Lydia F.I.R.
  68. 68 I Miss You 罗百吉_青春美少女.
白色恋人 - 游鸿明
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 林利南

作曲 : 游鸿明

编曲 : 涂惠源

冷空气 却清晰

你在南极冰山雪地里

极光中雪白的肌肤

是哀愁是美丽

为了要遇见你

我连呼吸都反复练习

兰伯特仁慈的冰川

带领我走向你

零下九十一度的酷寒

滚滚红尘千年的呼喊

藏在沃斯托克的湖岸

沉寂轻叹

撒哈拉漫天狂沙 金字塔谁能解答

兵马俑谁与争锋 长城万里相逢

人世间悲欢聚散 一页页写在心上

含着泪白色恋人 却有灰色的年轮

零下九十一度的酷寒

滚滚红尘千年的呼喊

藏在沃斯托克的湖岸

沉静轻叹

撒哈拉漫天狂沙 金字塔谁能解答

兵马俑谁与争锋 长城万里相逢

人世间悲欢聚散 一页页写在心上

含着泪白色恋人 却有灰色的年轮

撒哈拉漫天狂沙 金字塔谁能解答

兵马俑谁与争锋 长城万里相逢

人世间悲欢聚散 一页页写在心上

含着泪白色恋人 却有灰色的年轮