enyang
enyang
Published on 2025-06-06 / 2 Visits
0
0

SpringBoot常用注解

核心启动与配置

  1. @SpringBootApplication

    • 作用:标记在主启动类上。它是三个关键注解的组合:

      • @SpringBootConfiguration: 表明该类是一个 Spring Boot 的配置类(继承自 @Configuration)。

      • @EnableAutoConfiguration开启 Spring Boot 的自动配置魔法。根据你添加的 jar 包依赖,自动配置 Spring 应用程序。

      • @ComponentScan自动扫描当前包及其子包下的组件(@Component, @Service, @Repository, @Controller 等),并将它们注册为 Spring Bean。

    • 位置: 应用入口类(main方法所在类)。

      @SpringBootApplication
      public class MyApplication {
          public static void main(String[] args) {
              SpringApplication.run(MyApplication.class, args);
          }
      }

Web开发

  1. @RestController

    • 作用组合注解,相当于 @Controller + @ResponseBody。标记的类表示它是一个 RESTful 控制器,其中所有方法的返回值默认直接写入 HTTP 响应体(通常为 JSON 或 XML),而不是跳转到视图。

    • 位置: Controller 类上。

      @RestController
      @RequestMapping("/api/users")
      public class UserController {
          // ...
      }
  2. @Controller

    • 作用: 标记一个类作为 Spring MVC 的控制器。通常用于传统的服务端渲染应用,方法返回视图名称。

    • 位置: Controller 类上(在 RESTful 场景下,通常用 @RestController 替代)。

  3. @RequestMapping

    • 作用映射 HTTP 请求到特定的处理方法(Handler Method)或控制器类。可以指定 URL 路径、HTTP 方法(GET, POST, PUT, DELETE 等)、请求参数、请求头等条件。

    • 位置: 类上(定义类级别的公共路径前缀)或方法上。

    • 变体(更常用、更简洁):

      • @GetMapping: 映射 GET 请求。

      • @PostMapping: 映射 POST 请求。

      • @PutMapping: 映射 PUT 请求。

      • @DeleteMapping: 映射 DELETE 请求。

      • @PatchMapping: 映射 PATCH 请求。

      @RestController
      @RequestMapping("/api") // 类级别前缀
      public class UserController {
      ​
          @GetMapping("/users") // 实际路径: /api/users
          public List<User> getAllUsers() { ... }
      ​
          @PostMapping("/users")
          public User createUser(@RequestBody User user) { ... }
      ​
          @GetMapping("/users/{id}") // {id} 是路径变量
          public User getUserById(@PathVariable Long id) { ... }
      }
  4. @PathVariable

    • 作用: 将 URL 模板变量的值绑定到方法参数上。

    • 位置: 方法参数前。

  5. @RequestParam

    • 作用: 将 HTTP 请求参数的值绑定到方法参数上。

    • 位置: 方法参数前。

      @GetMapping("/users")
      public List<User> getUsersByRole(@RequestParam(name = "role", defaultValue = "user") String roleName) {
          // 处理查询参数 role=xxx 的逻辑
      }
  6. @RequestBody

    • 作用: 将 HTTP 请求体的内容(通常是 JSON 或 XML)绑定到方法参数对象上。用于接收前端提交的复杂数据。

    • 位置: 方法参数前(通常是对象类型)。

  7. @ResponseBody

    • 作用: 指示方法的返回值应该直接写入 HTTP 响应体,而不是解析为视图名称。通常用在 @Controller 类中的方法上。

    • 位置: 方法上或返回值类型前。(@RestController 已经为整个类加上了此注解,所以其方法上无需再加)。

依赖注入与Bean管理

  1. @Component

    • 作用通用注解,标识一个类为 Spring 组件(Bean)。被扫描后,由 Spring 容器管理其生命周期和依赖注入。

    • 位置: 类上。

    • 特化注解(语义更明确,功能相同):

      • @Service: 标识服务层组件。

      • @Repository: 标识数据访问层(DAO)组件。通常与 JPA/Hibernate/MyBatis 等一起使用,Spring 还会为此注解标记的 DAO 类提供额外的异常转换。

      • @Controller: 标识 Web 控制器组件(见上文)。

      • @RestController: 标识 RESTful 控制器组件(见上文)。

      • @Configuration: 标识配置类,其中可以定义 @Bean 方法(见下文)。

  2. @Autowired

    • 作用: 自动注入依赖。Spring 容器会自动查找匹配类型(或名称)的 Bean 并注入到字段、构造方法或 setter 方法中。

    • 位置: 字段、构造方法、setter 方法或普通方法上。推荐使用构造器注入(加在构造方法上)。

      @Service
      public class UserService {
      ​
          private final UserRepository userRepository;
      ​
          @Autowired // Spring 4.3+ 后,如果类只有一个构造方法,此注解可省略
          public UserService(UserRepository userRepository) {
              this.userRepository = userRepository;
          }
          // ... 使用 userRepository
      }
  3. @Bean

    • 作用: 在 @Configuration 类的方法上使用。该方法返回的对象将被注册为一个 Spring Bean,由 Spring 容器管理。常用于配置第三方库的组件或需要复杂初始化的 Bean。

    • 位置@Configuration 类中的方法上。

      @Configuration
      public class AppConfig {
      ​
          @Bean // 方法名默认为 Bean 的名称,也可用 (name="myBean") 指定
          public MyService myService() {
              return new MyServiceImpl();
          }
      }
  4. @Qualifier

    • 作用: 当有多个相同类型的 Bean 存在时,配合 @Autowired 使用,通过指定 Bean 的名称来消除歧义,精确注入所需的 Bean。

    • 位置: 字段、方法参数上(紧跟在 @Autowired 旁边)。

      @Autowired
      @Qualifier("mainDataSource") // 指定注入名为 "mainDataSource" 的 DataSource Bean
      private DataSource dataSource;
  5. @Primary

    • 作用: 当存在多个相同类型的 Bean 时,标记某个 Bean 为首选项(默认候选者)。这样在使用 @Autowired 按类型注入时,会优先选择带有 @Primary 注解的 Bean。

    • 位置@Component 类或 @Bean 方法上。

      @Configuration
      public class DataSourceConfig {
      ​
          @Bean
          @Primary // 标记为首选 DataSource
          public DataSource primaryDataSource() { ... }
      ​
          @Bean
          public DataSource secondaryDataSource() { ... }
      }


Comment