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

Spring boot注解介绍

1. Spring 核心注解

Spring Boot 是基于 Spring 框架的,所以核心注解依然适用。

✅ 常见核心注解

  • @Component
    表示一个通用组件,Spring 会自动扫描并注入到容器中。

    @Component
    public class MyComponent {public void sayHello() {System.out.println("Hello from Component!");}
    }
    
  • @Service
    表示业务逻辑层的组件(语义化,更适合 Service 层)。

    @Service
    public class UserService {public String getUser() {return "User";}
    }
    
  • @Repository
    表示持久层的组件(DAO 层),会额外处理数据库相关异常。

    @Repository
    public class UserRepository {public void saveUser() {System.out.println("User saved");}
    }
    
  • @Controller / @RestController

    • @Controller:返回视图(模板引擎,如 Thymeleaf)。

    • @RestController:等价于 @Controller + @ResponseBody,返回 JSON 数据。

    @RestController
    @RequestMapping("/api")
    public class UserController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";}
    }
    
  • @Autowired
    自动注入 Bean(默认按类型匹配)。

    @RestController
    public class HelloController {@Autowiredprivate UserService userService;
    }
    

2. Spring Boot 特有注解

✅ 启动 & 配置类

  • @SpringBootApplication
    Spring Boot 的核心启动注解,相当于:

    • @Configuration

    • @EnableAutoConfiguration

    • @ComponentScan

    @SpringBootApplication
    public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
    }
    
  • @EnableAutoConfiguration
    开启自动配置(Spring Boot 会根据依赖自动配置 Bean)。

  • @ConfigurationProperties
    将配置文件(application.yml / application.properties)绑定到 Java 类上。

    @Component
    @ConfigurationProperties(prefix = "app")
    public class AppProperties {private String name;private String version;// getter/setter
    }
    
  • @Value
    直接注入配置属性。

    @Value("${app.name}")
    private String appName;
    

3. Web 注解

✅ 请求映射

  • @RequestMapping:定义路径映射,可用于类和方法。

  • @GetMapping / @PostMapping / @PutMapping / @DeleteMapping:更具体的 HTTP 方法注解。

    @RestController
    @RequestMapping("/users")
    public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable Long id) {return "User " + id;}
    }
    

✅ 参数绑定

  • @PathVariable:获取路径参数。

  • @RequestParam:获取请求参数(?key=value)。

  • @RequestBody:绑定请求体 JSON 到对象。

  • @RequestHeader:获取请求头。

    @PostMapping("/create")
    public String createUser(@RequestBody User user,@RequestHeader("token") String token) {return "User created: " + user.getName() + ", token=" + token;
    }
    

4. 数据验证注解(JSR-303)

常用于参数校验,结合 @Valid@Validated 使用。

  • @NotNull:不能为空

  • @NotBlank:字符串不能为空

  • @Size(min, max):限制长度

  • @Email:校验邮箱

  • @Pattern:正则校验

    public class UserDTO {@NotBlank(message = "用户名不能为空")private String username;@Email(message = "邮箱格式不正确")private String email;
    }@PostMapping("/register")
    public String register(@Valid @RequestBody UserDTO user) {return "注册成功";
    }
    

5. 事务 & 异步

  • @Transactional:开启事务管理。

    @Service
    public class OrderService {@Transactionalpublic void createOrder() {// 数据库操作}
    }
    
  • @Async:异步执行方法。

    @Service
    public class EmailService {@Asyncpublic void sendEmail(String to) {System.out.println("Sending email to " + to);}
    }
    

6. 测试相关注解

  • @SpringBootTest:启动完整 Spring Boot 上下文。

  • @WebMvcTest:仅启动 Web 层。

  • @MockBean:模拟一个 Bean(用于单元测试)。

    @SpringBootTest
    class UserServiceTest {@Autowiredprivate UserService userService;
    }
    

7. 条件注解(高级用法)

Spring Boot 提供条件装配,按环境决定是否加载 Bean。

  • @ConditionalOnProperty:配置属性满足条件时加载。

  • @ConditionalOnMissingBean:当容器中没有某个 Bean 时才加载。

  • @Profile:指定环境下生效(如 dev, prod)。

    @Service
    @Profile("dev")
    public class DevUserService implements UserService {}@Service
    @Profile("prod")
    public class ProdUserService implements UserService {}
    

8. 其他常用注解

  • @Bean:在 @Configuration 类中定义 Bean。

  • @Primary:多个 Bean 时,标记优先注入。

  • @Qualifier:按名称指定 Bean。

  • @Order:指定加载顺序。


👉 总结:

  • 核心注解(@Component, @Service, @Controller…)用于 Bean 管理。

  • Spring Boot 特有注解(@SpringBootApplication, @ConfigurationProperties…)用于简化配置。

  • Web 注解 处理请求映射和参数绑定。

  • 事务、异步、测试、条件注解 提供更高级的控制。

http://www.dtcms.com/a/359304.html

相关文章:

  • 【51单片机】【protues仿真】基于51单片机音乐盒(8首歌曲)系统
  • 策略模式:灵活应对算法动态切换
  • AI军团协同作战:Manus Wide Research深度解析
  • 【LeetCode_27】移除元素
  • stm32F4挂载emmc以及重定义printf
  • 解决Docker运行hello-world镜像报错问题
  • Decoder 解码器
  • 【MLLM】多模态理解Ovis2.5模型和训练流程(更新中)
  • 工业产品营销:概念、原理、流程与实践指南
  • Ubuntu中通过SSH克隆Windows的远程Git仓库(局域网中挺有用)
  • QWidget和QML模式下阻止槽调用的方法总结
  • Megatron-LM(模型并行)
  • 【ACP】2025-最新-疑难题解析- 练习二汇总
  • STFT和梅尔频谱图
  • 项目管理的关键成功因素
  • 119、【OS】【Nuttx】【周边】效果呈现方案解析:变量展开
  • 【从零开始java学习|第十篇】面向对象
  • 【Blender】二次元人物制作【一】:二次元角色头部建模
  • Gray Code (格雷码)
  • 2025.8.30项目二基于UDP的TFTP文件传输
  • 【ICO】快速制作ICON教材/使用icofx3快速制作ico
  • 【多项式】快速沃尔什变换 (FWT)
  • 复现 RoboDK 机器人校准功能(以Staubli TX2‑90L / TX200机械臂为测试对象)
  • 关于铭飞平台企业官网模板使用中常到的问题、企业官网的百度认证以及IDEA编辑启动器的快捷方法/Apipost本地和云端没法同步的问题解决
  • 如何改变传统教育的消费习惯-第三代结束-第四代开启
  • 数值分析——数据误差对函数值的影响
  • 数据治理进阶——26页如何进行数据治理【附全文阅读】
  • 项目管理方法论有哪些流派
  • TuringComplete游戏攻略(一、基础逻辑电路)
  • Python(五)Python_C API详细