当前位置: 首页 > news >正文

Java Spring Boot 自定义注解详解与实践

目录

    • 一、自定义注解的场景与优势
      • 1.1 场景
      • 1.2 优势
    • 二、创建自定义注解
      • 2.1 定义注解
      • 2.2 创建注解处理器
    • 三、使用自定义注解
      • 3.1 在业务方法上使用注解
      • 3.2 配置类加载注解
    • 四、总结

在 Spring Boot 中,自定义注解为我们提供了一种灵活且强大的方式来简化开发、增强代码的可读性和可维护性。通过自定义注解,我们可以实现诸如统一日志记录、性能监控、权限验证等功能,而无需在每个业务方法中重复编写相同的代码。本文将深入探讨如何在 Spring Boot 3.0 中创建和使用自定义注解,并提供具体的代码示例。

一、自定义注解的场景与优势

1.1 场景

在开发过程中,我们常常需要在多个地方实现相同的功能,例如日志记录、性能监控、权限验证等。如果直接在每个业务方法中编写这些功能的代码,会导致代码重复和难以维护。

1.2 优势

使用自定义注解的优势在于:

  • 减少重复代码 :通过注解的方式,将公共逻辑集中到一个地方,避免在多个地方重复编写相同的代码。
  • 增强代码可读性 :注解能够清晰地表达方法的用途和行为,使代码更具可读性。
  • 便于维护和扩展 :当需要修改或扩展功能时,只需修改注解的实现逻辑,而无需在多个地方进行修改。

二、创建自定义注解

2.1 定义注解

使用 @interface 关键字定义注解,并通过 @Retention@Target 等元注解来指定注解的保留策略和适用目标。

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD) // 指定注解适用的目标类型为方法
@Retention(RetentionPolicy.RUNTIME) // 指定注解的保留策略为运行时
@Documented
public @interface LogAnnotation {String module() default ""; // 模块名称String operation() default ""; // 操作描述
}

2.2 创建注解处理器

通过创建注解处理器(Aspect),利用 AOP(面向切面编程)来拦截带有自定义注解的方法,并在方法执行前后添加自定义逻辑。

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;@Aspect
@Component
@Order(1) // 指定切面的顺序
public class LogAspect {private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);@Pointcut("@annotation(LogAnnotation)") // 定义切点,匹配使用了 LogAnnotation 的方法public void logPointcut() {}@Before("logPointcut()")public void doBefore() {logger.info("方法执行前,添加日志记录逻辑");}
}

三、使用自定义注解

3.1 在业务方法上使用注解

在需要记录日志的业务方法上添加自定义注解,指定模块名称和操作描述。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
public class DemoController {@GetMapping("/test")@LogAnnotation(module = "测试模块", operation = "测试方法执行")public String test() {return "Hello, World!";}
}

3.2 配置类加载注解

确保 Spring 能够扫描到自定义注解和注解处理器,可以在主应用类或配置类上添加 @ComponentScan 注解,指定扫描的包路径。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;@SpringBootApplication
@ComponentScan(basePackages = "your.package.name") // 指定扫描的包路径
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

四、总结

在 Spring Boot 中创建和使用自定义注解,可以帮助我们实现代码的复用、增强代码的可读性和可维护性。通过定义注解、创建注解处理器,并在业务方法上使用注解,可以轻松实现诸如日志记录、性能监控、权限验证等功能。希望本文的示例和讲解能够帮助你更好地理解和应用 Spring Boot 3.0 中的自定义注解。

相关文章:

  • Camera相机人脸识别系列专题分析之六:MTK ISP6S平台人脸识别fdnode流程FdNodeImp.cpp详解
  • 历年四川大学计算机保研上机真题
  • rm删除到回收站
  • RustDesk 搭建自建服务器并设置服务自启动
  • deepseek问答记录:请讲解一下torch.full_like()
  • 大数据量下的数据修复与回写Spark on Hive 的大数据量主键冲突排查:COUNT(DISTINCT) 的陷阱
  • 基本数据指针的解读-C++
  • Visual Studio中的宏变量
  • Python打卡训练营day40——2025.05.30
  • 每日算法 -【Swift 算法】将整数转换为罗马数字
  • JS手写代码篇---手写节流函数
  • allWebPlugin中间件VLC专用版之截图功能介绍
  • 评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
  • 历年西安交通大学计算机保研上机真题
  • 异步并发控制代码详细分析
  • WEB3——什么是ABI
  • 《TCP/IP 详解 卷1:协议》第2章:Internet 地址结构
  • <PLC><socket><西门子>基于西门子S7-1200PLC,实现手机与PLC通讯(通过websocket转接)
  • 云原生微服务架构演进之路:理念、挑战与实践
  • 小型图书管理系统案例(用于spring mvc 实践)
  • 做美容有哪些网站/网络优化工程师工作内容
  • 网站建设费计什么科目/国际新闻大事
  • 静态网站开发项目实验报告/怎么开网站平台
  • 做海报找素材的网站/小红书seo关键词优化多少钱
  • wordpress 编辑器模板/广告优化师培训
  • 两女互舔互做日美网站/微信引流获客软件