李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
!Destiny
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 正文

SpringBoot常用注解

2025年5月28日 约 1,132 字4 分钟 201 0 2
本文最后更新于 2025年5月28日,距今已 482 天,其中的信息可能已经发生变化,请注意甄别。

Spring Boot 提供了大量注解用于简化配置和开发,以下是核心常用注解分类及实战用法:

一、Bean 相关注解

1. @Component

作用:标识普通组件,被 Spring 容器自动扫描注册为 Bean。
场景:通用层(工具类、非 MVC 组件)。

@Component  
public class MyUtils {  
    public void helperMethod() { /* ... */ }  
}  

2. @Controller & @RestController

  • @Controller:标识 MVC 控制器,返回视图(需配合 @ResponseBody 返回数据)。
    @Controller  
    public class ViewController {  
      @GetMapping("/page")  
      public String showPage(Model model) {  
          model.addAttribute("data", "Hello");  
          return "index"; // 返回视图名  
      }  
    }  
  • @RestController:组合 @Controller 和 @ResponseBody,直接返回 JSON/XML。
    @RestController  
    public class ApiController {  
      @GetMapping("/api/data")  
      public User getUser() {  
          return new User("Alice", 28); // 自动序列化为 JSON  
      }  
    }  

3. @Service & @Repository

  • @Service:标识服务层组件,聚焦业务逻辑。
    @Service  
    public class OrderService {  
      public void processOrder() { /* 业务逻辑 */ }  
    }  
  • @Repository:标识持久层组件,常配合 MyBatis 等框架。
    @Repository  
    public interface UserDao {  
      @Select("SELECT * FROM user WHERE id=#{id}")  
      User findById(Long id);  
    }  

4. @Configuration & @Bean

  • @Configuration:标识配置类,替代传统 XML 配置。
    @Configuration  
    public class AppConfig {  
      @Bean  
      public DataSource dataSource() {  
          return new HikariDataSource(); // 配置数据源 Bean  
      }  
    }  
  • @Bean:在配置类中定义 Bean,手动控制实例化逻辑。

二、依赖注入注解

1. @Autowired

作用:按类型自动注入 Bean,Spring 核心注解。

@RestController  
public class UserController {  
    @Autowired  
    private UserService userService; // 注入服务层 Bean  
}  

2. @Resource(JDK 提供)

作用:默认按名称注入,可通过 name 属性指定 Bean 名称。

@RestController  
public class UserController {  
    @Resource(name = "userService")  
    private UserService userService; // 按名称注入  
}  

3. @Qualifier

作用:与 @Autowired 配合,解决同类型 Bean 注入歧义。

@Service  
public class UserService { /* ... */ }  

@Service("adminService")  
public class AdminService implements UserService { /* ... */ }  

@RestController  
public class Controller {  
    @Autowired  
    @Qualifier("adminService")  
    private UserService service; // 指定注入 adminService  
}  

三、Web 开发注解

1. 请求映射

  • @RequestMapping:通用请求映射,支持多种请求方法。
    @RestController  
    @RequestMapping("/api/v1/users")  
    public class UserController {  
      @RequestMapping(value = "/{id}", method = RequestMethod.GET)  
      public User getById(@PathVariable Long id) { /* ... */ }  
    }  
  • @GetMapping/@PostMapping:专用于 GET/POST 请求,简化写法。
    @GetMapping("/list")  
    public List list() { /* ... */ }  

2. 参数绑定

  • @RequestParam:获取查询参数(如 ?name=Alice)。
    @GetMapping("/search")  
    public String search(@RequestParam String keyword, @RequestParam int page = 1) { /* ... */ }  
  • @PathVariable:获取 URL 路径参数(如 /user/{id})。
    @GetMapping("/user/{id}")  
    public User getUser(@PathVariable Long id) { /* ... */ }  
  • @RequestBody:解析请求体 JSON 数据为对象。
    @PostMapping("/create")  
    public void create(@RequestBody User user) { /* 接收 JSON 数据 */ }  

四、配置与属性注入

1. @Value

作用:从配置文件(如 application.properties)读取单个属性。

@Component  
public class AppConfig {  
    @Value("${server.port}")  
    private int port; // 注入端口号  
}  

2. @ConfigurationProperties

作用:批量绑定配置属性到实体类,支持复杂结构。

# application.yml  
my:  
  app:  
    name: "SpringBootDemo"  
    env: dev  
@Component  
@ConfigurationProperties(prefix = "my.app")  
public class AppProperties {  
    private String name;  
    private String env;  
    // getters and setters  
}  

五、启动与配置类注解

1. @SpringBootApplication

作用:标注启动类,组合以下 3 个核心注解:

  • @Configuration:声明配置类。
  • @EnableAutoConfiguration:启用自动配置(如 Tomcat、Spring MVC 等)。
  • @ComponentScan:自动扫描主类所在包及其子包的组件。
    @SpringBootApplication  
    public class DemoApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(DemoApplication.class, args);  
    }  
    }  

2. @EnableAutoConfiguration

作用:手动启用自动配置,可排除特定配置。

@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)  
public class AppConfig { /* 排除数据源自动配置 */ }  

六、其他关键注解

1. @Transactional

作用:声明数据库事务,支持传播行为、隔离级别等配置。

@Service  
public class OrderService {  
    @Transactional(rollbackFor = Exception.class)  
    public void createOrder(Order order) {  
        // 数据库操作,异常时自动回滚  
    }  
}  

2. @Scheduled

作用:实现定时任务,支持 cron 表达式。

@Component  
public class ScheduledTask {  
    @Scheduled(cron = "0 0 0 * * MON-FRI") // 每周一到周五零点执行  
    public void cleanLogs() {  
        // 定时清理日志任务  
    }  
}  

3. @Scope

作用:指定 Bean 作用域(默认单例)。

@Bean  
@Scope("prototype") // 每次注入创建新实例  
public MyBean prototypeBean() {  
    return new MyBean();  
}  

总结

Spring Boot 注解通过“约定大于配置”原则大幅提升开发效率,核心需掌握:

  • 组件管理:@Component 全家桶(@Controller/@Service 等)与 @Bean/@Configuration 的配合。
  • 依赖注入:@Autowired/@Resource 的选择与 @Qualifier 的解歧义作用。
  • Web 开发:请求映射(@RequestMapping)与参数绑定(@RequestBody/@PathVariable)。
  • 配置管理:@Value 与 @ConfigurationProperties 的适用场景。

实际开发中可结合 IDE 提示快速查找注解用法,无需死记硬背,重点理解各层注解的职责与组合逻辑。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/article/4434

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

SpringBoot常用注解

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: JAVA Spring SpringBoot 注解
最后更新:2025年5月28日

岁月同一天 9 月 22 日

回望过去的今天,你在写什么

  • 3 年前 2023年9月22日
    《人生海海》读后感

    前段时间读完了麦家的《人生海海》,起初对人生海海这个词不太理解,记得第一次听到这个词,应该是在《欢喜就好》这首歌里,里面…

  • 4 年前 2022年9月22日
    OHCache使用

    OHCache介绍 缓存框架OHC基于Java语言实现,并以类库的形式供其他Java程序调用,是一种以单机模式运行的堆外…

相关文章
  • Java浮点数运算2022年7月15日
  • SpringBoot和SpringCloud版本对应2019年8月29日
  • OHCache使用2022年9月22日
  • CompletableFuture使用详解2025年5月28日
  • 通俗解释下Spring的Ioc原理2019年11月13日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

  • SeerLv 1

    好高深看不懂的样子~

    iOSiOSSafari 18.5Safari 18.5新加坡新加坡-Singapore
    2025年5月28日
    00 回复
    • 李锋镝博主

      @Seer :19: :19: :19:

      WindowsWindowsChrome 137.0.0.0Chrome 137.0.0.0中国中国-北京
      2025年5月28日
      00 回复
  • 地上本没有路,走的人多了,也便成了路。

    听点儿音乐吧 朋友~
    文章目录
    最新 热点 随机
    最新 热点 随机
    让WordPress静态化之Rocket‑Nginx WordPress下一代默认主题Ipsum预览 C++之父重磅发声:AI编程正在毁掉一代程序员 支撑全网40%网站的WordPress正在重新拥抱PHP生态 Kratos-plus v1.1.24版本更新说明 关于主题加载速度优化的一点儿小演进
    关于主题加载速度优化的一点儿小演进给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比关于使用AI的一些思考Kratos+ v1.1.16版本更新说明AI时代,个人技术博客的出路在哪里?
    使用shell脚本统一修改maven项目的版本 深入解析 localhost 与 127.0.0.1:不止于“本地访问”的技术细节 从SQL规范性检查、表结构索引检查着手分析如何优化SQL Spring Boot 2.5.0重新设计的spring.sql.init 配置有啥用? IDEA版本2020.*全局MAVEN配置 关于重阳节
    最近评论
    李锋镝 发布于 2 天前(09月20日) 静态博客我之前也用过,但是感觉不是很方便,后来就一直用的WordPress
    Sheep5 发布于 2 天前(09月20日) 我直接用静态博客,天然有速度优势。
    不凡 发布于 2 天前(09月20日) 主要是wordpress插件丰富,需要什么功能插件,插件市场应有尽有,typecho是性能更好、更轻...
    李锋镝 发布于 2 天前(09月20日) 忒极简了,而且这个布局我也搞不懂
    李锋镝 发布于 2 天前(09月20日) 哈哈哈~自定义的功能都是符合自己需求的
    标签聚合
    日常 多线程 MQ ElasticSearch SQL 分布式 架构 WordPress Claude K8s JAVA JVM IDEA Spring 数据库 Redis AI编程 SpringBoot MySQL AI
    友情链接
    • 蜗牛工作室
    • 临窗旋墨
    • 懋和道人
    • 皮皮社
    • lijie blog
    • Serendipity
    • 九仞之行
    • 韩小韩博客
    • 若梦博客
    • 韩情脉脉
    • 哥斯拉
    • 搬砖日记
    • 知向前端
    • 林羽凡
    • 瓦匠个人小站
    • sssr7844的博客
    • 彬红茶日记
    • Honesty
    • 老张博客
    • 志文工作室

    COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

    lifengdi.com

    Domain age badge for lifengdi.com

    Theme Kratos-plus By Dylan Li

    津ICP备2024022503号-3

    京公网安备11011502039375号