首页 > 其他分享 >信步漫谈之自定义AOP注释

信步漫谈之自定义AOP注释

时间:2024-11-12 19:42:25浏览次数:1  
标签:Around 自定义 int 漫谈 .. AOP 执行 com

目录


1 目标

  • 自定义注释的AOP实现

2 AOP基本概念

  • Aspect 【切面】:通常是一个类,里面可以定义切入点和通知;
  • JointPoint 【连接点】:程序执行过程中明确的点,一般是方法的调用;
  • Advice 【通知】:AOP在特定的切入点上执行的增强的处理,有before/after/around/afterRetuing/afterThrowing;
  • PointCut (切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式。
  • Excution 表达式:定义切入点规则,多个方法形成一个切面;
  • AOP主要作用:使业务和功能代码解耦,进行无侵入性的代码增强

3 AOP之Execution表达式解释

例:execution(* .(..))

  • 第一个*:代表的是方法返回的类型
  • 第二个*:代表扫描的包路径;
  • 第三个*:包路径下的方法名,(..)代表方法的参数;
@Around("@annotation(com.king..LogAspect)")                                 //容器中加了LogAspect注解的类才拦截;
@Before("execution(public int com.king.aop.Calc.div(int,int))")             //拦截div(intent)方法,返回参数是int;
@Before("execution(public int com.king.aop.Calc.*(..))")                    //拦截包下的所有的方法;
@Around("execution(public int com.king.aop.Calc.*(..)) && @annotation(log)")  //将注解 DoSomething作为一个参数传递进来

4 AOP注释执行顺序

try
{
     1、 环绕前置通知;@Around 
     2、 前置通知;   @Before      
     3、 执行目标方法; method.invoke()
     4、 环绕后置通知;@Around
     5、 执行返回通知;@After
}catche(Exception e){
     5.1、执行异常通知;@AfterThrowing  没有异常不打印,有异常替换@After
}finally{
     6、执行后置通知;@AfterReturning
}

5 知识池

  • 如果要确定两个切面的执行顺序,可以给aspect添加@Order注解,值越小优先级越高。
  • JoinPoint 和 ProceedingJoinPoint的关系
    • ProceedingJoinPoint 只能在@Around中使用
    • JoinPoint也可以获取入参(getArgs()),它可以用于@Before 和 @AfterReturning
    • Proceedingjoinpoint 继承了 JoinPoint 。是在JoinPoint的基础上暴露出 proceed 这个方法
  • @Around如果不执行proceed(),那么原方法将不会执行

6 源码

https://gitee.com/alfredinchange/java-developer.git 下 com.alfred.java.customannotationaop

7 参考资料(感谢)

Spring的AOP流程

标签:Around,自定义,int,漫谈,..,AOP,执行,com
From: https://www.cnblogs.com/alfredinchange/p/18542519

相关文章

  • Qt滑动条美化自定义
    效果展示主要代码头文件下面是hi控件的头文件,我们继承一个Qt原生的滑动条类QSlider,然后在基类的基础上进行自定义,我会对重要的变量进行解析:classXSlider:publicQSlider{Q_OBJECTpublic:explicitXSlider(QWidget*parent=nullptr);protected:......
  • express使用morgan+file-stream-rotator实现自定义日志+轮转
    importexpress,{json}from'express';importfsfrom'fs';importpathfrom'path';importmorganfrom'morgan';importFileStreamRotatorfrom'file-stream-rotator';constapp=express();//自动采集一些东西//......
  • 插件工厂和AOP拦截器机制
    一.插件工厂基于接口机制的插件工厂是一种设计模式,用于创建和管理插件。插件是独立的模块,可以动态加载和卸载,以扩展应用程序的功能。通过使用接口,插件工厂可以提供一种统一的方式来创建和管理这些插件,而不需要了解插件的具体实现细节。具体实现来说,实现一个插件工厂通过哈希记......
  • 自定义 LangChain 组件:打造专属 RAG 应用
    引言在构建专业的检索增强生成(RAG)应用时,LangChain提供了丰富的内置组件。然而,有时我们需要根据特定需求定制自己的组件。本文将深入探讨如何自定义LangChain组件,特别是文档加载器、文档分割器和检索器,以打造更加个性化和高效的RAG应用。自定义文档加载器LangChain的文档......
  • RL 基础 | 如何使用 OpenAI Gym 接口,搭建自定义 RL 环境(详细版)
    参考:官方链接:Gymdocumentation|Makeyourowncustomenvironment腾讯云|OpenAIGym中级教程——环境定制与创建知乎|如何在Gym中注册自定义环境?g,写完了才发现自己曾经写过一篇:RL基础|如何搭建自定义gym环境(这篇博客适用于gym的接口,gymnasium接口也差不......
  • 编写starrocks的自定义函数
    编写StarRocks的自定义函数前提条件StarRocks使用udf函数需要满足以下条件:安装jdk1.8开启udf功能,在FE的配置文件fe/conf/fe.conf中设置配置项enable_udf为true,并且重启FE节点使配置生效开发使用UDF函数创建maven项目,并且用java实现udf函数创建maven项目并且添加以......
  • SpringBoot集成SpringSecurity并实现自定义认证
    目录一、SpringSecurity简介二、集成SpringSecurity1、引入依赖2、编写核心配置类3、数据库建表4、自定义session失效策略5、自定义认证6、重写loadUserByUsername方法7、登录页面和接口三、总结一、SpringSecurity简介SpringSecurity是一个能够为基于Spring的企......
  • 「Java开发指南」如何自定义Spring代码生成?(二)
    搭建用户经常发现自己对生成的代码进行相同的修改,这些修改与个人风格/偏好、项目特定需求或公司标准有关,本教程演示自定义代码生成模板,您将学习如何:创建自定义项目修改现有模板来包含自定义注释使用JET和Skyway标记库中的标记配置项目来使用自定义在上文中,我们为大家介绍了......
  • 鸿蒙自定义组件生命周期
    在开始之前,我们先明确自定义组件和页面的关系:自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个......
  • 自定义类型那点事儿
    自定义类型:结构体,位段,枚举,联合目录自定义类型:结构体,位段,枚举,联合结构体1.结构体的声明2.结构体的特殊声明3.结构体的自引用4.结构体变量的定义和初始化5.结构体内存对齐6.修改默认对齐数7.结构体传参位段1.什么是位段?2.位段的内存分配3.位段的跨平台问题枚举......