springboot自定义注解(一)

springboot自定义注解(一)在整个 spring 框架中 提供的注解非常的多 这些注解简化了我们的很多操作 那么 我们如何自定义注解呢 第一步 学习已有的注解 Target ElementType METHOD ElementType TYPE Retention RetentionPol RUNTIME Documented Mappingpubli interfaceReq

在整个spring框架中,提供的注解非常的多,这些注解简化了我们的很多操作。那么,我们如何自定义注解呢?

第一步:学习已有的注解

@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { 
    String name() default ""; @AliasFor("path")  String[] value() default { 
   }; @AliasFor("value")  String[] path() default { 
   }; RequestMethod[] method() default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {}; }
/*源码级别*/ // Annotations are to be discarded by the compiler. SOURCE, /*编译期级别*/ /*Annotations are to be recorded in the class file by the compiler,but need not be retained by the VM at run time. This is the defaultbehavior.*/ CLASS, /*运行期级别*/ /*Annotations are to be recorded in the class file by the compiler and retained by the VM at run time, so they may be read reflectively. RUNTIME

3.@Documented
定义注解会被javadoc或者其他类似工具文档化
4.@Mapping
定义注解是一个web mapping annotation






第二步:创建自定义注解

@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyFirstAnnotation { 
    String value() default ""; }

第三步:定义切面类
创建完自定义注解后,很显然的思路是如何让注解起作用。这里以输出日志的注解为例,当用自定义注解来修饰方法时,我们期望在方法执行的前后输出日志记录,那么我们必须采用AOP(面向切面编程)的思想,理所当然地,我们需要定义切面类:

@Aspect @Component public class MyFirstAspect { @Pointcut("@annotation(MyFirstAnnotation)") public void annotationPointcut() { } @Before("annotationPointcut()") public void beforePointcut(JoinPoint joinPoint) { MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); Method method = methodSignature.getMethod(); MyFirstAnnotation annotation = method.getAnnotation(MyFirstAnnotation.class); String value = annotation.value(); System.out.println("准备"+value); } @After("annotationPointcut()") public void afterPointcut(JoinPoint joinPoint) { MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); Method method = methodSignature.getMethod(); MyFirstAnnotation annotation = method.getAnnotation(MyFirstAnnotation.class); String value = annotation.value(); System.out.println("结束"+value); } }

重点需要关注的是:切点的定义,切点可以定义成execute(public String sayHello()) 的形式,但是这种形式就和咱们的注解不相关了,因此我们采用@annotation(MyFirstAnnotation) 的形式,这样切点就变成了我们自定义注解所修饰的方法
第四步:使用自定义注解

@MyFirstAnnotation("吃饭") @RequestMapping(value = "/say") public String sayHello() { System.out.println("吃饭"); return "hello spring boot"; }

控制台结果输出:

准备吃饭 吃饭 结束吃饭
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225986.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:06
下一篇 2026年3月17日 上午8:06


相关推荐

  • C语言的标识符命名规则

    C语言的标识符命名规则

    2021年9月27日
    61
  • ubuntu性能优化_ubuntu系统安装教程

    ubuntu性能优化_ubuntu系统安装教程有两个工具可以帮助减少电脑过热问题,提升系统性能。特别是比较慢的笔记本。TLP开始后自动在后台运行。sudoadd-apt-repositoryppa:linrunner/tlpsudoapt-getupdatesudoapt-getinstalltlptlp-rdwsudotlpstartindicator-cpufreqsudoapt-getinstallindi

    2026年1月28日
    6
  • 均值漂移(Meanshift)算法

    均值漂移(Meanshift)算法均值漂移(Meanshift)1.均值漂移的基本概念:沿着密度上升方向寻找聚簇点设想在一个有N个样本点的特征空间初始确定一个中心点center,计算在设置的半径为D的圆形空间内所有的点(xi)与中心点center的向量计算整个圆形空间内所有向量的平均值,得到一个偏移均值将中心点center移动到偏移均值位置重复移动,直到满足一定条件结束2.均值漂移运算:

    2022年7月14日
    27
  • 永恒之蓝封445端口方法_永恒之蓝病毒解决方法

    永恒之蓝封445端口方法_永恒之蓝病毒解决方法补丁下载地址http://www.catalog.update.microsoft.com/search.aspx?q=kb4012212下载第二个,33.2M的那个,然后安装,并重启。然后,封445端口新建两个文件:block_445.reg内容为:WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE…

    2022年10月17日
    7
  • php面向过程和面向对象的区别

    php面向过程和面向对象的区别PHP 语言是同时可以应用面向过程和面向对象方式的编程 面向过程与面向对象在许多编程语言中只能使用二者之一来进行编程 但是 PHP 语言与其他编程语言有不同之处 那就是我们可以自由的选择某种编程方式 或者将 PHP 面向过程和 PHP 面向对象二者混用 面向过程编程采用由上至下的程序设计方法 分析出解决问题所需要的步骤 然后用函数把这些步骤一步一步实现 使用的时候一个一个依次调用就可以了 面向对象是把整

    2025年9月17日
    3
  • 谷歌最强生图模型来了!NanoBanana新功能详解+使用入口

    谷歌最强生图模型来了!NanoBanana新功能详解+使用入口

    2026年3月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号