SpringBoot中自定义注解

简介: SpringBoot中自定义注解

注解


1. 元注解


元注解就是定义注解的注解,是Java提供的用于定义注解的基本注解

image.png

1.1 @Target


该注解的作用是告诉java将自定义的注解放在什么地方,比如类、方法、构造器、变量上等


它的值是一个枚举类型,有以下属性值


  • ElementType.CONSTRUCTOR:用于描述构造器
  • ElementType.FIELD:用于描述成员变量、对象、属性
  • ElementType.LOCAL_VARIABLE:用于描述局部变量
  • ElementType.METHOD:用于描述方法
  • ElementType.PACKAGE:用于描述包
  • ElementType.PARAMETER:用于描述参数
  • ElementType.TYPE:用于描述类、接口或enum枚举声明


1.2 @Retention


该注解用于说明自定义注解的生命周期,在注解中有三个生命周期

  • RetentionPolicy.RUNTIME:始终不会丢弃,运行期也保留该注解,可以使用反射机制读取该注解的信息
  • RetentionPolicy.CLASS:类加载时丢弃,默认使用这种方式
  • RetentionPolicy.SOURCE:编译阶段丢弃,自定义注解在编译结束之后就没有意义,所以不会写进字节码,熟悉的

@Override就属于这种


1.3 @Inherited


该注解是一个标记注解,表明被标记的类型是可以被继承的。如果一个使用这个标记的注解被使用了,那么该类的子类也会用到这个注解


1.4 @Documented


该注解表示是否将注解信息添加在java文档中


1.5 @interface


该注解用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数,方法名称就是参数名称,返回值类型就是参数的类型


2. 实现一个自定义注解


首先创建一个自定义注解


package com.example.demo;
 import org.springframework.stereotype.Component;
 import java.lang.annotation.*;
 @Target({ElementType.METHOD,ElementType.TYPE})
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 @Component
 public @interface MyAnnotation {
     String value();
 }
复制代码


然后编写一个业务逻辑,这里就是拦截被自定义注解的方法,然后在控制台打印注解参数


package com.example.demo;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.springframework.stereotype.Component;
 import java.lang.reflect.Method;
 @Aspect
 @Component
 public class TestAnnotationAspect {
     @Pointcut("@annotation(com.example.demo.MyAnnotation)")
     public void myAnnotationPointCut(){}
     @Before("myAnnotationPointCut()")
     public void before(JoinPoint joinPoint)throws Throwable{
         MethodSignature sign=(MethodSignature) joinPoint.getSignature();
         Method method=sign.getMethod();
         MyAnnotation annotation=method.getAnnotation(MyAnnotation.class);
         System.out.println("Test Annotation参数:"+annotation.value());
     }
 }
复制代码


最后实现一个Controller,访问页面的时候查看业务逻辑是否被打印


package com.example.demo;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 @RestController
 public class TestAnnotationController {
     @GetMapping("/test")
     @MyAnnotation("测试自定义注解")
     public String test(){
         return "shelgi";
     }
 }
复制代码


运行结果如下


image.png

目录
相关文章
|
2月前
|
Java 开发者 Spring
【SpringBoot 异步魔法】@Async 注解:揭秘 SpringBoot 中异步方法的终极奥秘!
【8月更文挑战第25天】异步编程对于提升软件应用的性能至关重要,尤其是在高并发环境下。Spring Boot 通过 `@Async` 注解简化了异步方法的实现。本文详细介绍了 `@Async` 的基本用法及配置步骤,并提供了示例代码展示如何在 Spring Boot 项目中创建与管理异步任务,包括自定义线程池、使用 `CompletableFuture` 处理结果及异常情况,帮助开发者更好地理解和运用这一关键特性。
125 1
|
2月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
2月前
|
缓存 Java 数据库连接
Spring Boot奇迹时刻:@PostConstruct注解如何成为应用初始化的关键先生?
【8月更文挑战第29天】作为一名Java开发工程师,我一直对Spring Boot的便捷性和灵活性着迷。本文将深入探讨@PostConstruct注解在Spring Boot中的应用场景,展示其在资源加载、数据初始化及第三方库初始化等方面的作用。
53 0
|
1天前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
9 2
|
10天前
|
Java Spring 容器
Spring使用异步注解@Async正确姿势
Spring使用异步注解@Async正确姿势,异步任务,spring boot
|
9天前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean
|
10天前
|
XML 前端开发 Java
控制spring框架注解介绍
控制spring框架注解介绍
|
23天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
2月前
|
Java 数据安全/隐私保护 Spring
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
|
2月前
|
XML Java 数据库
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
这篇文章是Spring5框架的实战教程,详细介绍了事务的概念、ACID特性、事务操作的场景,并通过实际的银行转账示例,演示了Spring框架中声明式事务管理的实现,包括使用注解和XML配置两种方式,以及如何配置事务参数来控制事务的行为。
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
下一篇
无影云桌面