news 2026/2/9 9:01:41

Spring Boot 常用注解详解:@Slf4j、@RequestMapping、@Autowired/@Resource 对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot 常用注解详解:@Slf4j、@RequestMapping、@Autowired/@Resource 对比

1. @Slf4j 作用

@Slf4j 是 Lombok 提供的注解,用于自动生成日志对象。

作用

  • 自动生成一个名为 log 的静态 final 日志对象(类型为 Logger)
  • 无需手动写 private static final Logger log = LoggerFactory.getLogger(类名.class);

使用示例

不使用 @Slf4j(传统方式):

import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class UserService { private static final Logger log = LoggerFactory.getLogger(UserService.class); public void test() { log.info("这是一条日志"); log.error("错误日志"); } }

使用 @Slf4j(简化方式):

import lombok.extern.slf4j.Slf4j; @Slf4j public class UserService{ public void test(){ log.info("这是一条日志"); //直接用log,无需手动创建 log.error("错误日志"); } }

日志级别

  • log.trace() - 跟踪信息
  • log.debug() - 调试信息
  • log.info() - 一般信息
  • log.warn() - 警告信息
  • log.error() - 错误信息

2. @RequestMapping

@RequestMapping 是 Spring MVC 的注解,用于将请求 URL 映射到控制器方法。

作用

  • 定义请求路径与处理方法的映射关系
  • 可指定请求方法(GET、POST、PUT、DELETE 等)
  • 可指定请求参数、请求头等条件

使用示例

基本用法:

@Controller @RequestMapping("/user") public class userController{ @RequestMapping("/login") public Stirng login{ return "login"; } @RequestMapping(value="/register",method=RequestMethod.POST) public String register{ return "register"; } }

指定请求方法

@RequestMapping(value = "/info", method = RequestMethod.GET) // 只接受 GET 请求 public String getInfo() { return "info"; } // 或者使用更简洁的注解 @GetMapping("/info") // 等同于上面的写法 @PostMapping("/create") // 等同于 @RequestMapping(method = RequestMethod.POST) @PutMapping("/update") // 等同于 @RequestMapping(method = RequestMethod.PUT) @DeleteMapping("/delete") // 等同于 @RequestMapping(method = RequestMethod.DELETE)

指定请求参数:

@RequestMapping(value="/search",params="keyword") //必须有keyword参数 public String search(){ return "result"; }

常用属性

  • value / path:请求路径
  • method:请求方法(GET、POST 等)
  • params:请求参数条件
  • headers:请求头条件
  • produces:响应内容类型(如 application/json)
  • consumes:请求内容类型

3. @Autowired 和 @Resource 区别

两者都用于依赖注入,但来源、默认策略和使用场景不同。

对比表

特性@Autowired@Resource
来源Spring 框架JDK(JSR-250 标准)
默认注入方式按类型(byType)按名称(byName)
找不到时的处理抛出异常(可用 required=false 避免)抛出异常
支持支持 @Qualifier 指定名称支持 name 属性指定名称
使用场景Spring 项目推荐更通用,不依赖 Spring

详细说明

@Autowired(Spring 注解)

默认按类型注入:

@Service public class userService{ // Spring 会查找类型为 UserMapper 的 Bean @Autowierd private UserMapper userMapper; }

按名称注入(需要配合 @Qualifier):

@Service public class UserService{ //如果有多个UserMapper实现,需要指定名称 @Autowired @Qualifier("userMapperImpl") //指定Bean名称 privarte UserMapper userMapper; }

允许为空(避免启动失败):

@Autowired(required=false) //如果找不到Bean,不会报错 private UserMapper userMapper;

构造函数注入(推荐方式):

@Service public class UserService{ private final UserMapper userMapper; @Autowired //Spring4.3+可以忽略 public UserService(UserMapper userMapper){ this.userMapper=userMapper; } }
@Resource(JDK 注解)

默认按名称注入:

@Service public class UserService { // 先按名称 "userMapper" 查找,找不到再按类型查找 @Resource private UserMapper userMapper; }

指定名称注入:

@Service public class UserService { @Resource(name = "userMapperImpl") // 明确指定 Bean 名称 private UserMapper userMapper; }

按类型注入(需要指定 type):

@Resource(type = UserMapper.class) // 按类型注入 private UserMapper userMapper;

实际使用建议

推荐使用 @Autowired:

  • Spring 项目
  • 按类型注入更直观
  • 支持构造函数注入(更安全,避免循环依赖)

使用 @Resource:

  • 需要按名称注入
  • 希望代码不依赖 Spring(但实际还是 Spring 容器管理)

最佳实践:

@Service public class UserService { // 推荐:使用构造函数注入,无需 @Autowired(Spring 4.3+) private final UserMapper userMapper; private final RedisTemplate<String, Object> redisTemplate; public UserService(UserMapper userMapper, RedisTemplate<String, Object> redisTemplate) { this.userMapper = userMapper; this.redisTemplate = redisTemplate; } }

总结

  1. @Slf4j:Lombok 注解,自动生成日志对象,简化日志代码
  2. @RequestMapping:Spring MVC 注解,映射请求路径到处理方法
  3. @Autowired vs @Resource:
  • @Autowired 默认按类型注入,Spring 推荐
  • @Resource 默认按名称注入,JDK 标准
  • 两者功能相似,但注入策略不同
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 12:11:27

从零搭建团队协作中枢:Planka看板部署实战手记

从零搭建团队协作中枢&#xff1a;Planka看板部署实战手记 【免费下载链接】planka planka - 一个优雅的开源项目管理工具&#xff0c;提供创建项目、看板、列表、卡片、标签和任务等功能&#xff0c;适用于需要进行项目管理和团队协作的程序员。 项目地址: https://gitcode.…

作者头像 李华
网站建设 2026/2/3 13:24:53

深度剖析典型电路图的硬件工作原理

从电路图看懂硬件世界&#xff1a;一个工程师的实战解析你有没有遇到过这样的场景&#xff1f;手头拿到一块陌生的开发板&#xff0c;或者一份密密麻麻的原理图&#xff0c;满屏都是电阻、电容、MOSFET和运放&#xff0c;却不知道从何下手分析。翻来覆去看了半天&#xff0c;只…

作者头像 李华
网站建设 2026/2/8 9:06:30

深度学习环境搭建避坑指南:Miniconda+PyTorch+GPU完整流程

深度学习环境搭建避坑指南&#xff1a;MinicondaPyTorchGPU完整流程 在深度学习项目启动前&#xff0c;最让人头疼的往往不是模型设计或数据处理&#xff0c;而是那个看似简单却暗藏玄机的环节——环境配置。你有没有遇到过这样的场景&#xff1f;论文代码拉下来后运行报错&…

作者头像 李华
网站建设 2026/2/3 11:20:00

TouchGal Galgame社区平台:重塑游戏文化体验的新范式

TouchGal Galgame社区平台&#xff1a;重塑游戏文化体验的新范式 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 深夜的电脑屏幕前&a…

作者头像 李华
网站建设 2026/2/3 2:41:57

Windows终极自定义神器Windhawk:零基础打造专属系统体验

Windows终极自定义神器Windhawk&#xff1a;零基础打造专属系统体验 【免费下载链接】windhawk The customization marketplace for Windows programs: https://windhawk.net/ 项目地址: https://gitcode.com/gh_mirrors/wi/windhawk 还在为Windows系统千篇一律的界面而…

作者头像 李华
网站建设 2026/2/7 2:06:47

Linux服务器上批量部署Miniconda-Python3.11用于AI推理服务

Linux服务器上批量部署Miniconda-Python3.11用于AI推理服务 在当今AI模型迭代速度不断加快的背景下&#xff0c;一个常见但棘手的问题浮出水面&#xff1a;为什么同一个模型代码&#xff0c;在开发机上运行流畅&#xff0c;一到生产服务器就报错&#xff1f;更令人头疼的是&…

作者头像 李华