李锋镝的博客

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

SpringBoot常用注解

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

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年5月22日
  • SpringBoot中@ImportAutoConfiguration注解与@Import和@EnableAutoConfiguration注解的区别2021年1月26日
  • 使用itext和freemarker来根据Html模板生成PDF文件,加水印、印章2019年9月5日
  • TestNG基本注解2019年7月23日
  • Spring中的Aware接口2025年5月17日

李锋镝

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

打赏 点赞
< 上一篇
下一篇 >
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游本昌去世关于主题加载速度优化的一点儿小演进
    全网最全Shiro认证与授权原理分析 妹妹的画【2019.07.05】 一文详解微服务架构 1931→2021! 是时候优雅的和NullPointException说再见了 数据库中的锁-SQL Server版
    最近评论
    fairy 发布于 5 小时前(11月06日) 机器人快来我这里吧!
    李锋镝 发布于 5 小时前(11月06日) 都是机器人,防不住
    李锋镝 发布于 5 小时前(11月06日) 是的,太烦了
    李锋镝 发布于 5 小时前(11月06日) 可以同一台服务器
    fairy 发布于 7 小时前(11月06日) 这流量,好厉害啊。我一年都没那么多
    标签聚合
    K8s 日常 多线程 Claude IDEA SQL 数据库 分布式 AI编程 MySQL 架构 WordPress Spring ElasticSearch JAVA AI Theme JVM Redis SpringBoot
    友情链接
    • 老张博客
    • 林羽凡
    • Serendipity
    • 知向前端
    • 刘永博客
    • 搬砖日记
    • 皮皮社
    • 九仞之行
    • 懋和道人
    • 彬红茶日记
    • 韩小韩博客
    • 瓦匠个人小站
    • Honesty
    • Mr.Sun的博客
    • sssr7844的博客
    • lijie blog
    • 韩情脉脉
    • 哥斯拉
    • 志文工作室

    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号