Spring Boot框架中常用注解

news2025/3/28 0:02:02

以下是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 {
        @Bean
        public DataSource dataSource() {
            return new HikariDataSource();
        }
    }
    
3. @Bean
  • 用途:在配置类中定义Bean实例,交给Spring容器管理。
  • 位置方法级别。
  • 示例
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    

二、依赖注入(DI)注解

1. @Autowired
  • 用途:自动注入Bean,支持字段、构造器、方法注入。
  • 位置字段、构造器、方法参数
  • 示例
    @Service
    public class UserService {
        @Autowired
        private UserRepository userRepository; // 字段注入
    }
    
    // 构造器注入(推荐)
    @Service
    public class OrderService {
        private final PaymentService paymentService;
    
        @Autowired
        public 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 {
        @Transactional
        public 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/mydb
      username: root
      password: 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 {
        @Autowired
        private UserService userService;
    }
    
2. @MockBean
  • 用途:在测试中模拟Bean(结合Mockito)。
  • 示例
    @SpringBootTest
    class PaymentServiceTest {
        @MockBean
        private PaymentGateway paymentGateway;
    
        @Test
        void 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 {
    @Autowired
    private ProductService productService;

    @GetMapping("/products/{id}")
    public Product getProduct(@PathVariable Long id, @RequestParam String lang) { ... }

    @PostMapping("/products")
    @Transactional
    public Product createProduct(@RequestBody Product product) { ... }
}

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

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

相关文章

ResNet与注意力机制:深度学习中的强强联合

引言 在深度学习领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;一直是图像处理任务的主流架构。然而&#xff0c;随着网络深度的增加&#xff0c;梯度消失和梯度爆炸问题逐渐显现&#xff0c;限制了网络的性能。为了解决这一问题&#xff0c;ResNet&#xff08;残差…

Flutter项目之页面实现以及路由fluro

目录&#xff1a; 1、项目代码结构2、页面编写以及路由配置main.dart(入口文件)page_content.dartindex.dartapplication.dartpubspec.yamllogin.dartdio_http.dart 3、Fluro路由routes.dartnot_found_page.dart(路由优化&#xff0c;找不到页面时展示此页面) 4、注册页面 1、项…

《Python实战进阶》第31集:特征工程:特征选择与降维技术

第31集&#xff1a;特征工程&#xff1a;特征选择与降维技术 摘要 特征工程是机器学习和数据科学中不可或缺的一环&#xff0c;其核心目标是通过选择重要特征和降低维度来提升模型性能并减少计算复杂度。本集聚焦于特征选择与降维技术&#xff0c;涵盖过滤法、包裹法、嵌入法等…

C++类与对象的第二个简单的实战练习-3.24笔记

哔哩哔哩C面向对象高级语言程序设计教程&#xff08;118集全&#xff09; 实战二 Cube.h #pragma once class Cube { private:double length;double width;double height; public:double area(void);double Volume(void);//bool judgement(double L1, double W1, double H1);…

Rk3568驱动开发_设备树点亮LED_10

设备树中添加节点 在设备树文件中添加led节点&#xff0c;添加完后需要重新编译内核&#xff0c;因为单独编译这个设备树文件生成的dtb文件目前不能直接做替换&#xff0c;所以要编译内核将编译好的boot.img文件烧录到设备里&#xff0c;boot.img里包含新添加的设备树节点&…

Unity学习之Shader(Phong与Blinn-Phong)

三、Lesson3 1、关键名称 向量 • nDir&#xff1a;法线方向&#xff0c;点乘操作时简称n&#xff1b; • lDir&#xff1a;光照方向&#xff0c;点乘操作时简称l&#xff1b; • vDir&#xff1a;观察方向&#xff0c;点乘操作时简称v&#xff1b; • rDir&#xff1a;光反…

uniapp笔记-swiper组件实现轮播图

思路 主要就是参考 swiper | uni-app官网 实现轮播图。 实例 新建一个banner.vue通用组件。 代码如下&#xff1a; <template><view>轮播图</view> </template><script> </script><style> </style> 随后在index.vue中导…

【C++ 继承】—— 青花分水、和而不同,继承中的“明明德”与“止于至善”

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

FPGA_YOLO(二)

上述对cnn卷积神经网络进行介绍,接下来对YOLO进行总结,并研究下怎么在FPGA怎么实现的方案。 对于一个7*7*30的输出 拥有49个cell 每一个cell都有两个bbox两个框,并且两个框所包含的信息拥有30个 4个坐标信息和一个置信度5个,剩下就是20个类别。 FPGA关于YOLO的部署 1…

蓝桥杯学习-14子集枚举,二进制枚举

子集枚举 一、回溯3-子集枚举&#xff08;递归实现指数型枚举&#xff09; 一旦涉及选与不选&#xff0c;删和不删&#xff0c;留和不留-->两种状态-->就要想到子集枚举例题1–递归实现指数型枚举19685 其实看不懂这个题目&#xff0c;好奇怪的题目。根据老师的解析来写…

人工智能时代大学教育范式重构:基于AI编程思维的能力培养路径研究

人工智能技术的快速发展正在重塑高等教育的内容与方法。本文以AI编程教育为切入点&#xff0c;通过文献分析与案例研究&#xff0c;探讨AI时代大学教育的核心能力需求与教学范式转型路径。研究发现&#xff0c;AI编程中蕴含的系统性思维训练、项目架构能力和元认知能力培养机制…

<数据集>轨道异物识别数据集<目标检测>

数据集下载链接&#xff1a;https://download.csdn.net/download/qq_53332949/90527370 数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1659张 标注数量(xml文件个数)&#xff1a;1659 标注数量(txt文件个数)&#xff1a;1659 标注类别数&#xff1a;6 标注类别…

Pyecharts功能详解与实战示例

一、Pyecharts简介 Pyecharts是一个基于Python的开源数据可视化库&#xff0c;它基于百度的Echarts库&#xff0c;提供了丰富的图表类型和强大的交互功能。通过Pyecharts&#xff0c;你可以轻松创建各种精美的图表&#xff0c;如折线图、柱状图、饼图、散点图、地图等&#xf…

EasyUI数据表格中嵌入下拉框

效果 代码 $(function () {// 标记当前正在编辑的行var editorIndex -1;var data [{code: 1,name: 1,price: 1,status: 0},{code: 2,name: 2,price: 2,status: 1}]$(#dg).datagrid({data: data,onDblClickCell:function (index, field, value) {var dg $(this);if(field ! …

C语言:扫雷

在编程的世界里&#xff0c;扫雷游戏是一个经典的实践项目。它不仅能帮助我们巩固编程知识&#xff0c;还能锻炼逻辑思维和解决问题的能力。今天&#xff0c;就让我们一起用 C 语言来实现这个有趣的游戏&#xff0c;并且通过图文并茂的方式&#xff0c;让每一步都清晰易懂 1. 游…

操作系统必知的面试题

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

清华大学.智灵动力-《DeepSeek行业应用实践报告》附PPT下载方法

导 读INTRODUCTION 今天分享是由清华大学.智灵动力&#xff1a;《DeepSeek行业应用实践报告》&#xff0c;主要介绍了DeepSeek模型的概述、优势、使用技巧、与其他模型的对比&#xff0c;以及在多个行业中的应用和未来发展趋势。为理解DeepSeek模型的应用和未来发展提供了深入的…

可视化图解算法:链表的奇偶重排(排序链表)

1. 题目 描述 给定一个单链表&#xff0c;请设定一个函数&#xff0c;将链表的奇数位节点和偶数位节点分别放在一起&#xff0c;重排后输出。 注意是节点的编号而非节点的数值。 数据范围&#xff1a;节点数量满足 0≤n≤105&#xff0c;节点中的值都满足 0≤val≤10000 要…

SAP Activate Methodology in a Nutshell Phases of SAP Activate Methodology

SAP Activate Methodology in a Nutshell Phases of SAP Activate Methodology

开源AI大模型、AI智能名片与S2B2C商城小程序源码:实体店引流的破局之道

摘要&#xff1a;本文聚焦实体店引流困境&#xff0c;提出基于"开源AI大模型AI智能名片S2B2C商城小程序源码"的技术整合方案。通过深度解析各技术核心机制与协同逻辑&#xff0c;结合明源云地产营销、杭州美甲店裂变等实际案例&#xff0c;论证其对流量精准获取、客户…