Spring Boot 中的常用注解

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


作者: 李锋镝
原文:SpringBoot常用注解 - 李锋镝的博客