李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 读书观影
  • 系列
  • AI工具集
  • 论坛
  • 友圈
    • 友链
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
静亦定 动亦定
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 正文

SpringBoot常用注解

2025年5月28日 289 0 2
本文最后更新于 2025年5月28日,距今已 528 天,其中的信息可能已经发生变化,请注意甄别。

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 提示快速查找注解用法,无需死记硬背,重点理解各层注解的职责与组合逻辑。

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

SpringBoot常用注解

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

微信扫一扫分享

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

岁月同一天 11 月 7 日

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

  • AI
    1 年前 2025年11月7日
    DeepSeek本地部署全攻略:从环境搭建到高级应用,打造专属 AI 助手

    DeepSeek 作为国产开源大模型的佼佼者,凭借出色的推理能力、代码生成效率和中文支持,成为很多开发者本地部署的首选。…

相关文章
  • JAVA开发处理金额的数据类型你知道多少?2025年10月28日
  • SpringBoot整合Elasticsearch游标查询(scroll)2020年10月16日
  • TestNG基本注解2019年7月23日
  • 为什么 SpringBoot 宁可挨骂也要干掉 spring.factories?2025年9月5日
  • 分代ZGC这么牛?底层原理是什么?2025年4月9日

李锋镝

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

打赏 点赞
< 上一篇
下一篇 >
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 回复
  • 报君黄金台上意,提携玉龙为君死!

    听点儿音乐吧 朋友~
    文章目录
    最新 热点 随机
    最新 热点 随机
    给服务器加了WAF 又一个逆天改命的人:小小徐 AI的生成能力等于生产力吗? NGINX严重漏洞(CVE-2026-15176、CVE-2026-93479、CVE-2026-97205) Kratos-plus v1.1.27更新说明 php2shell远程执行漏洞修复(CVE-2026-109618 和 CVE-2026-109619)
    给主题增加了游客中心功能心气没了,干什么都不得劲我觉得是时候公布我的导航网站了给服务器加了WAF游本昌去世关于主题加载速度优化的一点儿小演进
    什么是RESTful?RESTful详解 突破AI大项目理解瓶颈:三大进阶策略+实战落地指南 HTTP3与QUIC详解 项目中慎用 CompletableFuture:这些坑你必须知道 封控、封控、再封控,居家、居家、再居家 JWT、Cookie、Session、Token 区别与实战选型指南
    最近评论
    fairy 发布于 21 小时前(11月06日) 机器人快来我这里吧!
    李锋镝 发布于 21 小时前(11月06日) 都是机器人,防不住
    李锋镝 发布于 21 小时前(11月06日) 是的,太烦了
    李锋镝 发布于 21 小时前(11月06日) 可以同一台服务器
    fairy 发布于 23 小时前(11月06日) 这流量,好厉害啊。我一年都没那么多
    标签聚合
    Theme MySQL SQL K8s IDEA JAVA JVM AI 分布式 Redis 数据库 WordPress 日常 架构 AI编程 Claude SpringBoot Spring 多线程 ElasticSearch
    友情链接
    • 懋和道人
    • 哥斯拉
    • 韩情脉脉
    • 知向前端
    • Mr.Sun的博客
    • lijie blog
    • sssr7844的博客
    • 瓦匠个人小站
    • 彬红茶日记
    • 九仞之行
    • Serendipity
    • 老张博客
    • 搬砖日记
    • 刘永博客
    • 志文工作室
    • 林羽凡
    • 韩小韩博客
    • 皮皮社
    • 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号