Spring Boot框架中常用注解

以下是Spring Boot框架中常用注解的详细说明,包括名称、用途、用法、使用位置及扩展示例,按功能模块分类整理:


一、核心启动与配置注解

1. @SpringBootApplication
  • 用途:主启动类注解,整合了 @Configuration@EnableAutoConfiguration@ComponentScan
  • 用法:标记主类,启动Spring Boot应用。
  • 位置级别。
  • 示例
    @SpringBootApplication
    public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
    }
    
2. @Configuration
  • 用途:声明一个类为配置类,用于定义Bean。
  • 位置级别。
  • 示例
    @Configuration
    public class AppConfig {@Beanpublic DataSource dataSource() {return new HikariDataSource();}
    }
    
3. @Bean
  • 用途:在配置类中定义Bean实例,交给Spring容器管理。
  • 位置方法级别。
  • 示例
    @Bean
    public RestTemplate restTemplate() {return new RestTemplate();
    }
    

二、依赖注入(DI)注解

1. @Autowired
  • 用途:自动注入Bean,支持字段、构造器、方法注入。
  • 位置字段、构造器、方法参数
  • 示例
    @Service
    public class UserService {@Autowiredprivate UserRepository userRepository; // 字段注入
    }// 构造器注入(推荐)
    @Service
    public class OrderService {private final PaymentService paymentService;@Autowiredpublic OrderService(PaymentService paymentService) {this.paymentService = paymentService;}
    }
    
2. @Qualifier
  • 用途:按名称指定注入的Bean(解决多个同类型Bean冲突)。
  • 位置字段、参数
  • 示例
    @Autowired
    @Qualifier("mysqlDataSource")
    private DataSource dataSource;
    
3. @Component
  • 用途:通用组件注解,标记类为Spring管理的Bean。
  • 子注解@Service@Repository@Controller
  • 位置级别。
  • 示例
    @Component
    public class EmailValidator { ... }
    
4. @Primary
  • 用途:当存在多个同类型Bean时,优先注入标记为@Primary的Bean。
  • 位置类或方法级别。
  • 示例
    @Bean
    @Primary
    public DataSource primaryDataSource() { ... }
    

三、Web开发注解

1. @RestController
  • 用途:标记为REST控制器,返回JSON/XML数据(等价于@Controller + @ResponseBody)。
  • 位置级别。
  • 示例
    @RestController
    @RequestMapping("/api/users")
    public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable Long id) { ... }
    }
    
2. @RequestMapping
  • 用途:映射HTTP请求路径和方法。
  • 属性path(路径)、method(请求方法)、produces(返回类型)。
  • 位置类或方法级别。
  • 示例
    @RequestMapping(value = "/books", method = RequestMethod.GET)
    public List<Book> getBooks() { ... }
    
3. @GetMapping / @PostMapping 等
  • 用途:简化的请求映射注解,支持GETPOSTPUTDELETE等。
  • 示例
    @PostMapping("/create")
    public ResponseEntity<User> createUser(@RequestBody User user) { ... }
    
4. @PathVariable
  • 用途:从URL路径中获取参数。
  • 位置方法参数
  • 示例
    @GetMapping("/orders/{orderId}")
    public Order getOrder(@PathVariable("orderId") String id) { ... }
    
5. @RequestParam
  • 用途:从请求参数中获取值(如?name=John)。
  • 属性required(是否必填)、defaultValue(默认值)。
  • 示例
    @GetMapping("/search")
    public List<User> searchUsers(@RequestParam(required = false) String keyword) { ... }
    
6. @RequestBody
  • 用途:将请求体中的JSON/XML数据反序列化为Java对象。
  • 位置方法参数
  • 示例
    @PostMapping("/users")
    public User createUser(@RequestBody User user) { ... }
    
7. @RequestHeader
  • 用途:从HTTP请求头中获取值。
  • 示例
    @GetMapping("/info")
    public String getInfo(@RequestHeader("User-Agent") String userAgent) { ... }
    
8. @CrossOrigin
  • 用途:允许跨域请求。
  • 位置类或方法级别。
  • 示例
    @CrossOrigin(origins = "http://localhost:3000")
    @RestController
    public class ApiController { ... }
    

四、数据访问(JPA/Hibernate)注解

1. @Entity
  • 用途:标记类为JPA实体,对应数据库表。
  • 位置级别。
  • 示例
    @Entity
    @Table(name = "employees")
    public class Employee { ... }
    
2. @Id / @GeneratedValue
  • 用途:定义主键字段及生成策略。
  • 示例
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
3. @Column
  • 用途:定义实体字段与数据库列的映射关系。
  • 属性name(列名)、nullable(是否允许空值)、length(长度)。
  • 示例
    @Column(name = "full_name", nullable = false, length = 50)
    private String name;
    
4. @Transactional
  • 用途:声明方法或类需要事务管理(如数据库操作失败自动回滚)。
  • 位置类或方法级别。
  • 示例
    @Service
    public class OrderService {@Transactionalpublic void placeOrder(Order order) {orderRepository.save(order);inventoryService.updateStock(order.getProductId());}
    }
    

五、配置管理注解

1. @Value
  • 用途:注入配置文件中的属性值。
  • 位置字段、方法参数
  • 示例
    @Value("${app.name}")
    private String appName;@Value("${app.timeout:30}") // 默认值30
    private int timeout;
    
2. @ConfigurationProperties
  • 用途:批量绑定配置文件属性到Java对象。
  • 位置级别。
  • 示例
    # application.yml
    database:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: secret
    
    @ConfigurationProperties(prefix = "database")
    @Component
    public class DatabaseConfig {private String url;private String username;private String password;// getters & setters
    }
    

六、测试注解

1. @SpringBootTest
  • 用途:启动完整Spring上下文进行集成测试。
  • 位置测试类
  • 示例
    @SpringBootTest
    class UserServiceTest {@Autowiredprivate UserService userService;
    }
    
2. @MockBean
  • 用途:在测试中模拟Bean(结合Mockito)。
  • 示例
    @SpringBootTest
    class PaymentServiceTest {@MockBeanprivate PaymentGateway paymentGateway;@Testvoid testPayment() {Mockito.when(paymentGateway.process(any())).thenReturn(true);// 测试逻辑}
    }
    

七、高级功能注解

1. @Scheduled
  • 用途:定时任务调度。
  • 属性fixedRate(固定频率)、cron(Cron表达式)。
  • 位置方法级别。
  • 示例
    @Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2点执行
    public void generateDailyReport() { ... }
    // 需在启动类添加 @EnableScheduling
    
2. @Async
  • 用途:异步执行方法。
  • 位置方法级别。
  • 示例
    @Async
    public void sendEmailAsync(String email) { ... }
    // 需在启动类添加 @EnableAsync
    
3. @Cacheable / @CacheEvict
  • 用途:声明方法结果缓存或清除缓存。
  • 示例
    @Cacheable(value = "users", key = "#userId")
    public User getUser(Long userId) { ... }@CacheEvict(value = "users", key = "#userId")
    public void deleteUser(Long userId) { ... }
    // 需在启动类添加 @EnableCaching
    

八、异常处理注解

1. @RestControllerAdvice
  • 用途:全局异常处理,结合@ExceptionHandler使用。
  • 示例
    @RestControllerAdvice
    public class GlobalExceptionHandler {@ExceptionHandler(ResourceNotFoundException.class)@ResponseStatus(HttpStatus.NOT_FOUND)public ErrorResponse handleNotFound(ResourceNotFoundException ex) {return new ErrorResponse(ex.getMessage(), 404);}
    }
    

总结

通过合理使用这些注解,可以显著简化Spring Boot开发:

  • 依赖管理@Autowired@Qualifier@Primary
  • Web开发@RestController@GetMapping@RequestBody
  • 数据访问@Entity@Transactional
  • 配置管理@Value@ConfigurationProperties
  • 测试与扩展@SpringBootTest@Scheduled@Async

实际开发中,可结合具体场景灵活组合这些注解,例如:

@RestController
@RequestMapping("/api")
@CrossOrigin
public class ProductController {@Autowiredprivate ProductService productService;@GetMapping("/products/{id}")public Product getProduct(@PathVariable Long id, @RequestParam String lang) { ... }@PostMapping("/products")@Transactionalpublic Product createProduct(@RequestBody Product product) { ... }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure Delta Lake、Databricks和Event Hubs实现实时欺诈检测

设计Azure云架构方案实现Azure Delta Lake和Azure Databricks&#xff0c;结合 Azure Event Hubs/Kafka 摄入实时数据&#xff0c;通过 Delta Lake 实现 Exactly-Once 语义&#xff0c;实时欺诈检测&#xff08;流数据写入 Delta Lake&#xff0c;批处理模型实时更新&#xff0…

车载以太网网络测试 -23【TCPUDP通信示例】

1 摘要 在车载通信场景中&#xff0c;TCP以及UDP的通信可以用于多种应用&#xff0c;例如车辆状态监控、远程控制、数据采集等。以下是详细的代码示例&#xff0c;展示了如何使用Python实现简单的TCP客户端与服务端通信以及简单的UDP客户端与服务端通信&#xff0c;并模拟了车…

SpringBoot大学生竞赛管理系统设计与实现

一个用于管理大学生竞赛报名、信息查询与竞赛管理的系统&#xff0c;采用了现代化的SpringBoot框架进行开发。该系统的主要功能包括学生信息管理、教师信息管理、竞赛报名审核、竞赛信息管理等模块&#xff0c;适用于学校或教育机构进行竞赛活动的组织与管理。系统界面简洁&…

深入解析libsunrpc:构建分布式系统的核心RPC库

深入解析libsunrpc&#xff1a;构建分布式系统的核心RPC库 引言 在分布式系统开发中&#xff0c;远程过程调用&#xff08;Remote Procedure Call, RPC&#xff09; 是连接不同节点、实现跨网络服务调用的关键技术。作为SUN公司开源的经典RPC实现&#xff0c;libsunrpc 凭借其…

MinIO搭建部署

1、命令行安装 访问monio官网下载应用程序 # wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20250228095516.0.0-1.x86_64.rpm -O minio.rpm # sudo dnf install minio.rpm # mkdir ~/minio # minio server ~/minio --console-address :90012、dock…

Linux修改SSH端口号

我这里那RedHat系列的操作系统举例,修改SSH端口号 修改SSH配置文件:/etc/ssh/sshd_config,将端口号修改为2222.vim /etc/ssh/sshd_config重启SSH服务systemctl restart sshd# 如果是比较旧的OS,使用下面的命令重启 service ssh restart验证端口更改是否成功netstat -tulnp …

【嵌入式Linux】基于ArmLinux的智能垃圾分类系统项目

目录 1. 功能需求2. Python基础2.1 特点2.2 Python基础知识2.3 dict嵌套简单说明 3. C语言调用Python3.1 搭建编译环境3.2 直接调用python语句3.3 调用无参python函数3.4 调用有参python函数 4. 阿里云垃圾识别方案4.1 接入阿里云4.2 C语言调用阿里云Python接口 5. 香橙派使用摄…

【商城实战(63)】配送区域与运费设置全解析

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…

字节跳动实习生主导开发强化学习算法,助力大语言模型性能突破

目录 禹棋赢的背景与成就 主要成就 DAPO算法的技术细节 算法优势 禹棋赢的研究历程 关键时间节点 字节跳动的“Top Seed人才计划” 计划特点 小编总结 在大模型时代&#xff0c;经验不再是唯一的衡量标准&#xff0c;好奇心、执行力和对新技术的敏锐洞察力成为推动技术…

Rust + 时序数据库 TDengine:打造高性能时序数据处理利器

引言&#xff1a;为什么选择 TDengine 与 Rust&#xff1f; TDengine 是一款专为物联网、车联网、工业互联网等时序数据场景优化设计的开源时序数据库&#xff0c;支持高并发写入、高效查询及流式计算&#xff0c;通过“一个数据采集点一张表”与“超级表”的概念显著提升性能…

使用LangChain实现基于LLM和RAG的PDF问答系统

目录 前言一.大语言模型(LLM)1. 什么是LLM&#xff1f;2. LLM 的能力与特点 二、增强检索生成(RAG)三. 什么是 LangChain&#xff1f;1. LangChain 的核心功能2. LangChain 的优势3. LangChain 的应用场景4. 总结 四.使用 LangChain 实现基于 PDF 的问答系统 前言 本文将介绍 …

群核科技持续亏损近18亿:营销费用偏高,市场份额优势面临挑战

《港湾商业观察》施子夫 2025年开年&#xff0c;DeepSeek的爆火让大众将目光聚焦到了“杭州六小龙”。其中&#xff0c;杭州群核信息技术有限公司&#xff08;以下简称&#xff0c;群核科技&#xff09;因系“六小龙”中首家启动上市的公司而被外界更多关注。 在此次递表港交…

java版嘎嘎快充玉阳软件互联互通中电联云快充协议充电桩铁塔协议汽车单车一体充电系统源码uniapp

演示&#xff1a; 微信小程序&#xff1a;嘎嘎快充 http://server.s34.cn:1888/ 系统管理员 admin/123456 运营管理员 yyadmin/Yyadmin2024 运营商 operator/operator2024 系统特色&#xff1a; 多商户、汽车单车一体、互联互通、移动管理端&#xff08;开发中&#xff09; 另…

音视频学习(三十):fmp4

FMP4&#xff08;Fragmented MP4&#xff09;是 MP4&#xff08;MPEG-4 Part 14&#xff09;的扩展版本&#xff0c;它支持流式传输&#xff0c;并被广泛应用于DASH&#xff08;Dynamic Adaptive Streaming over HTTP&#xff09;和HLS&#xff08;HTTP Live Streaming&#xf…

26考研——图_图的存储(6)

408答疑 文章目录 二、图的存储图的存储相关概念邻接矩阵存储方式邻接矩阵的定义顶点的度计算邻接矩阵的特点邻接矩阵的局限性 应用场景邻接矩阵的幂次意义&#xff08;了解即可&#xff09; 邻接表存储方式邻接表定义邻接表结构邻接表的特点 邻接矩阵和邻接表的适用性差异十字…

以高斯(GaussDB) 为例, 在cmd 命令行连接数据,操作数据库,关闭数据库的详细步骤

以下是使用 Windows 命令行&#xff08;cmd&#xff09; 操作 GaussDB&#xff08;以 GaussDB(for openGauss) 社区版为例&#xff09; 的详细步骤&#xff0c;涵盖 连接数据库、基本操作、关闭数据库 的全流程&#xff1a; 1. 环境准备 前提条件&#xff1a; 安装 GaussDB&a…

HAL库定时器配置

定时器的开启需要手动开启&#xff0c;例如在driver_capature.c开启&#xff0c;该文件主要写了具体的函数实现&#xff0c;与driver_can.c一样&#xff0c;同时还有回调函数等一些高级的自定义函数。 这段代码是 STM32 HAL 库中用于初始化 定时器 2 (TIM2) 的函数 MX_TIM2_In…

使用Python开发自动驾驶技术:车道线检测模型

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…

Modern C++面试题及参考答案

目录 解释右值引用的定义及其与左值引用的核心区别 std::move 的实现原理是什么?为什么它本身不执行移动操作? 移动构造函数与拷贝构造函数的调用场景有何不同? 实现一个支持移动语义的类需要遵循哪些原则? 完美转发(Perfect Forwarding)的实现原理及 std::forward 的…

Thinkphp(TP)框架漏洞攻略

1.环境搭建 vulhub/thinkphp/5-rce docker-compose up -d 2.访问靶场 远程命令执行&#xff1a; ? sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1] []whoami 远程代码执行&#xff1a; ? s/Index/\think\app/invokefunc…