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

Spring Boot常用注解全解析:从入门到实战

🌱 Spring Boot常用注解全解析:从入门到实战

#SpringBoot核心 #注解详解 #开发技巧 #高效编程


一、核心启动与配置注解

1. @SpringBootApplication

作用:标记主启动类,整合了@Configuration@EnableAutoConfiguration@ComponentScan
示例

@SpringBootApplication  
public class MyApp {  public static void main(String[] args) {  SpringApplication.run(MyApp.class, args);  }  
}  

2. @Configuration 与 @Bean

作用:声明配置类,定义Bean
示例

@Configuration  
public class AppConfig {  @Bean  public DataSource dataSource() {  return new HikariDataSource();  }  
}  

二、Web开发相关注解

1. @RestController

作用:组合@Controller@ResponseBody,用于返回JSON/XML数据
示例

@RestController  
@RequestMapping("/api")  
public class UserController {  @GetMapping("/users")  public List<User> getUsers() {  return userService.findAll();  }  
}  

2. @RequestMapping 与 HTTP方法注解

作用:映射HTTP请求路径与方法

@PostMapping("/create")  
public User createUser(@RequestBody User user) {  return userService.save(user);  
}  @PutMapping("/update/{id}")  
public User updateUser(@PathVariable Long id, @RequestBody User user) {  return userService.update(id, user);  
}  

三、依赖注入与Bean管理

1. @Autowired

作用:自动注入依赖,默认按类型匹配
示例

@Service  
public class UserService {  @Autowired  private UserRepository userRepository;  
}  

2. @Component系列注解

注解适用场景
@Service业务逻辑层
@Repository数据访问层(JPA)
@ControllerMVC控制器(返回视图)

四、数据访问与JPA注解

1. @Entity 与 @Table

作用:定义JPA实体类与数据库表映射
示例

@Entity  
@Table(name = "t_users")  
public class User {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private Long id;  private String name;  
}  

2. @Repository

作用:标记数据访问层,自动处理数据库异常

@Repository  
public interface UserRepository extends JpaRepository<User, Long> {  // 自定义查询方法  User findByName(String name);  
}  

五、配置与属性绑定

1. @Value

作用:注入配置文件中的属性值
示例

# application.properties  
app.max.retry=3  
@Service  
public class PaymentService {  @Value("${app.max.retry}")  private int maxRetry;  
}  

2. @ConfigurationProperties

作用:批量绑定配置文件到Java对象

@ConfigurationProperties(prefix = "app")  
@Data  
public class AppConfig {  private int maxRetry;  private String apiKey;  
}  

六、条件注解

1. @ConditionalOnProperty

作用:根据配置属性决定是否创建Bean
示例

@Bean  
@ConditionalOnProperty(name = "app.cache.enabled", havingValue = "true")  
public CacheManager cacheManager() {  return new RedisCacheManager();  
}  

2. @Profile

作用:指定Bean在特定Profile下生效

@Bean  
@Profile("prod")  
public DataSource prodDataSource() {  // 生产环境数据源  
}  

七、AOP与事务管理

1. @Aspect 与 @Around

作用:实现切面编程,增强方法逻辑
示例

@Aspect  
@Component  
public class LogAspect {  @Around("execution(* com.example.service.*.*(..))")  public Object logExecutionTime(ProceedingJoinPoint pjp) throws Throwable {  long start = System.currentTimeMillis();  Object result = pjp.proceed();  System.out.println("方法执行耗时: " + (System.currentTimeMillis() - start) + "ms");  return result;  }  
}  

2. @Transactional

作用:声明式事务管理

@Service  
public class OrderService {  @Transactional  public void placeOrder(Order order) {  // 数据库操作  }  
}  

八、测试相关注解

1. @SpringBootTest

作用:加载完整应用上下文进行集成测试

@SpringBootTest  
class UserServiceTest {  @Autowired  private UserService userService;  @Test  void testFindUser() {  User user = userService.findById(1L);  assertNotNull(user);  }  
}  

2. @MockBean

作用:注入Mock对象,用于单元测试

@SpringBootTest  
class PaymentServiceTest {  @MockBean  private PaymentGateway paymentGateway;  @Test  void testPayment() {  when(paymentGateway.process(any())).thenReturn(true);  // 测试逻辑  }  
}  

总结

Spring Boot通过丰富的注解极大简化了开发流程:

  • 启动类@SpringBootApplication
  • Web开发@RestController@GetMapping
  • 数据访问@Entity@Repository
  • 依赖管理@Autowired@Component
  • 配置管理@Value@ConfigurationProperties

正确使用这些注解,能快速构建高效、可维护的Spring Boot应用。建议结合官方文档与实际项目加深理解! 🚀

相关文章:

Spring Boot常用注解全解析:从入门到实战

&#x1f331; Spring Boot常用注解全解析&#xff1a;从入门到实战 #SpringBoot核心 #注解详解 #开发技巧 #高效编程 一、核心启动与配置注解 1. SpringBootApplication 作用&#xff1a;标记主启动类&#xff0c;整合了Configuration、EnableAutoConfiguration和Component…...

【重学Android】1.关于@Composer注解的一点知识笔记

最新因为一些原因&#xff0c;开始重新学习Android及kotlin编程&#xff0c;也觉得可以顺带记录下这个过程中的一些知识点&#xff0c;也可以用作日后自己查找复习。 Composable 注解在 Android 开发中的使用 Composable 是 Jetpack Compose&#xff08;Android 的现代声明式…...

【排队论】Probabilistic Forecasts of Bike-Sharing Systems for Journey Planning

Probabilistic Forecasts of Bike-Sharing Systems forJourney Planning abstract 我们研究了对共享单车系统&#xff08;BSS&#xff09;车站未来自行车可用性进行预测的问题。这是相关的&#xff0c;以便提出建议&#xff0c;保证用户能够进行旅行的概率足够高。为此&#x…...

大数据平台简介

一、分布式系统基础架构 &#xff08;一&#xff09;定义与核心特征 分布式系统是由多台计算机&#xff08;节点&#xff09;通过网络协作组成的系统&#xff0c;对外表现为一个统一整体。其核心特征包括&#xff1a; 去中心化&#xff1a;节点平等或分角色协作&#xff08;如…...

加一:从简单问题到复杂边界的深度思考

加一&#xff1a;从简单问题到复杂边界的深度思考 引言 在算法世界里&#xff0c;有些问题看似简单&#xff0c;实则暗藏玄机&#xff0c;其中“加一”问题就是一个典型例子。所谓“加一”&#xff0c;通常指的是给一个由数字组成的数组表示的整数加一&#xff0c;这听起来简…...

高精度算法(加、减、乘、除、阶乘和)​

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 唯有主动付出&#xff0c;才有丰富的果…...

实战设计模式之备忘录模式

概述 与解释器模式、迭代器模式一样&#xff0c;备忘录模式也是一种行为设计模式。备忘录模式允许我们保存一个对象的状态&#xff0c;并在稍后恢复到这个状态。该模式非常适合于需要回滚、撤销或历史记录等功能的应用场景。通过使用备忘录模式&#xff0c;开发者可以轻松添加诸…...

keil5 µVision 升级为V5.40.0.0:增加了对STM32CubeMX作为全局生成器的支持,主要有哪些好处?

在Keil5 μVision V5.40.0.0版本中,增加了对STM32CubeMX作为全局生成器的支持,这一更新主要带来了以下三方面的提升: 开发流程整合STM32CubeMX原本就支持生成Keil项目代码,但新版本将这一集成升级为“全局生成器”级别,意味着STM32CubeMX生成的代码能直接成为Keil项目的核…...

吉尔吉斯斯坦工商会代表团赴齐河德瑞新能源汽车考察

德州齐河&#xff0c;2025年4月15日电 时中美贸易突变之际&#xff0c;乘国家一带一路之风。 展中国新能源之宏图&#xff0c;塑国贸体系之新方向。 今日上午&#xff0c;吉尔吉斯斯坦共和国工商会代表团一行三人受邀抵达济南&#xff0c;开启对德瑞新能源科技有限公司&…...

无人机在农业中的应用与挑战!

一、无人机在农业中的作用 1. 提升作业效率与降低成本 无人机在喷洒农药、播种、施肥、吊运等环节显著提升效率。例如&#xff0c;湖北秭归县使用大疆T100无人机吊运脐橙&#xff0c;单次85公斤的运输任务仅需2分钟&#xff0c;而人工需1小时&#xff0c;综合成本降低250元…...

放松大脑的方法

帮助一个人放松大脑&#xff0c;需要结合生理调节、心理技巧和环境优化。以下是一些科学有效的方法&#xff0c;涵盖即时缓解和长期习惯培养&#xff1a; 一、即时放松技巧&#xff08;快速起效&#xff09; 1. 深呼吸法&#xff08;4-7-8呼吸&#xff09; 方法&#xff1a;吸…...

QT网络拓扑图绘制实验

前言 在网络通讯中&#xff0c;我qt常用的是TCP或者UDP协议&#xff0c;就比方说TCP吧&#xff0c;一台服务器有时可能会和多台客户端相连接&#xff0c;我之前都是处理单链接情况&#xff0c;最近研究图结构的时候&#xff0c;突然就想到了这个问题。那么如何解决这个问题呢&…...

英语四级翻译题练习文章示例

大学正慢慢成为过去吗?Are universiities slowly becoming a thing of the past? 1.1900年前后&#xff0c;法国艺术家让-马克科泰接受委托绘制一组图画&#xff0c;描绘他认为的2000年人们可能过上的生活。Around 1900, the French artist Jean-Marc Cote was commissioned …...

支持中文对齐的命令行表格打印python库——tableprint

文章目录 快速入门 还在为表格中含有中文&#xff0c;命令行打印无法对齐而苦恼吗&#xff1f; 还在为冗长的数据添加代码而抓狂吗&#xff1f; tableprint来了&#xff01;&#xff01;&#xff01;&#xff0c;它完美的解决了上述两个问题&#xff0c;快来试试吧&#xff01;…...

从《周游记3》演绎歌剧版《菊花台》,周杰伦婚礼曲目意大利文版惊喜亮相

今天&#xff08;4月19日&#xff09;22:00&#xff0c;由魔胴西西里咖啡冠名的户外实境互动综艺《周游记3》第四期即将播出。本期节目中&#xff0c;“J式之旅”发起人周杰伦和林暐恒、杜国璋、陈冠霖、陈冠廷&#xff0c;将继续意大利之旅&#xff0c;从那不勒斯的百年老店到…...

生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)

免疫检查点分子与肿瘤免疫治疗 免疫检查点分子与肿瘤免疫治疗-2...

CasualLanguage Model和Seq2Seq模型的区别

**问题1&#xff1a;**Causal Language Modeling 和 Conditional Generation 、Sequence Classification 的区别是什么&#xff1f; 因果语言模型(Causal Language Model)&#xff1a; 预测给定文本序列中的下一个字符&#xff0c;一般用于文本生成、补全句子等&#xff0c;模型…...

verilog float mult

module pipe_float_mul(input wire clk ,// 时钟信号input wire en ,// 使能信号input wire rst_n ,// 复位信号input wire round_cfg ,// 决…...

微信小程序调用yolo目标检测模型

目录 后端 前端微信小程序 完整代码 后端 利用Flask&#xff0c;调用目标检测模型&#xff0c;后端代码如下。 # flask_yolo.py from flask import Flask, request, jsonify from ultralytics import YOLO from PIL import Imageapp Flask(__name__) model_path best.p…...

Flink框架十大应用场景

Flink框架适合应用的场景 1. 流式数据处理 Flink框架最常用的应用场景是流式数据处理。流式数据处理是指对实时数据进行处理,以便及时地做出决策。例如,一个电商网站需要对用户的行为进行实时分析,以便根据用户的兴趣和行为推荐商品。Flink框架可以帮助电商网站实时地处理数…...

Crawl4AI:重塑大语言模型数据供给的开源革命者

在AI技术飞速迭代的今天&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的进化已从单纯参数竞赛转向数据质量与实时性的深度博弈。传统API接口的僵化、静态数据库的滞后性&#xff0c;正在成为制约AI系统实用价值的桎梏。而Crawl4AI的出现&#xff0c;以开源之力重构了数…...

Android 应用wifi direct连接通信实现

一. 打开Wi-Fi direct 1.必须启用Wi-Fi功能&#xff1a;在设备设置中开启Wi-Fi主开关&#xff08;即使未连接路由器&#xff09; 关闭冲突功能&#xff1a;若已开启「热点共享」或连接到其他Wi-Fi网络&#xff0c;需先关闭相关功能以避免硬件占. <!-- Wi-Fi Direct 核心权限…...

Java 动态代理教程(JDK 动态代理)(以RPC 过程为例)

1. 什么是动态代理 在运行时为指定的接口自动生成代理对象&#xff0c;并通过 invoke 方法增强了这些对象的功能 2. 两个核心组件 java.lang.reflect.Proxy类 这个类提供了方法&#xff1a;newProxyInstance()用来创建一个代理对象 public static Object newProxyInstance(…...

【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】

1. 背景 我们会在很多资料上看到 BluetoothPhoneService 类&#xff0c;但是我们在实际 aosp 中确找不到具体的实现&#xff0c; 这是为何&#xff1f; 这是一个很好的问题&#xff01;虽然在车载蓝牙电话场景中我们经常提到类似 BluetoothPhoneService 的概念&#xff0c;但…...

【mongodb】数据库操作

目录 1. 查看所有数据库2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则创建&#xff09;3. 查看当前使用的数据库4. 删除当前数据库5.默认数据库 1. 查看所有数据库 1.show dbs2.show databases 2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则…...

【Harmony】文本公共接口EditMenuOptions的使用

文章目录 一、EditMenuOptions介绍二、相关接口介绍2.1、editMenuOptions2.2、EditMenuOptionsonCreateMenu函数说明onMenuItemClick函数说明 2.3、TextRange对象说明2.4、TextMenuItem对象说明2.5、TextMenuItemId属性ofequals 三、简单案例 一、EditMenuOptions介绍 EditMen…...

《软件设计师》复习笔记(14.1)——面向对象基本概念、分析设计测试

目录 一、面向对象基本概念 对象&#xff08;Object&#xff09; 类&#xff08;Class&#xff09; 抽象&#xff08;Abstraction&#xff09; 封装&#xff08;Encapsulation&#xff09; 继承&#xff08;Inheritance&#xff09; 多态&#xff08;Polymorphism&#…...

C++ 基于多设计模式下的同步异步⽇志系统-1准备工作

一.项目介绍 项⽬介绍 本项⽬主要实现⼀个⽇志系统&#xff0c; 其主要⽀持以下功能: • ⽀持多级别⽇志消息 • ⽀持同步⽇志和异步⽇志 • ⽀持可靠写⼊⽇志到控制台、⽂件以及滚动⽂件中 • ⽀持多线程程序并发写⽇志 • ⽀持扩展不同的⽇志落地⽬标地 二.日志系统的三种实现…...

JS中实现类似sleep、wait、delay的延时功能

前言 编写代码时很多时候需要进行流程化的操作&#xff0c;各个流程间通常需要等待一定时间&#xff0c;这在很多语言中通常可以使用 sleep 、 wait 、 delay 等函数来实现。JavaScript原生并没有类似的功能&#xff0c;想要延时通常就是使用 setTimeout(functionRef, delay) …...

Banana Pi BPI-RV2 RISC-V 路由器开发板发售, 全球首款RISC-V路由器

Banana Pi BPI-RV2 开源路由器是矽昌通信和⾹蕉派开源社区&#xff08;Banana Pi &#xff09;合作设计, 联合打造全球首款RISC-V架构路由器开发板。 这是香蕉派开源社区与矽昌通信继BPI-Wifi5 低成本Wifi5 路由器合作之后的又一力作&#xff0c;为全球开发者与商业客户提供基于…...