java——SpringBoot中常用注解及其底层原理

时间:2024-11-28 20:27:48
  • @SpringBootApplication

    • 标注在主程序类上,表示这是一个Spring Boot应用的入口。
    • 它是一个复合注解,包括了@Configuration、@EnableAutoConfiguration和@ComponentScan。
      @SpringBootApplication
      public class MyApplication {
          public static void main(String[] args) {
              SpringApplication.run(MyApplication.class, args);
          }
      }

  • @EnableAutoConfiguration

    • 启用Spring Boot的自动配置机制,根据添加的依赖和配置文件自动配置Spring应用。
      @EnableAutoConfiguration
      public class MyApplication {
          public static void main(String[] args) {
              SpringApplication.run(MyApplication.class, args);
          }
      }

  • @Configuration

    • 标识一个类作为配置类,相当于传统的Spring XML配置文件。
    • 可以包含一个或多个@Bean方法。
      @Configuration
      public class AppConfig {
          @Bean
          public MyService myService() {
              return new MyServiceImpl();
          }
      }

  • @ComponentScan

    • 指定要扫描的包,以便发现和注册Spring组件。
    • 默认情况下,扫描主应用类所在的包及其子包。
      @ComponentScan(basePackages = "com.example")
      public class MyApplication {
      }

  • @Component

    • 将一个类标识为Spring组件(Bean),可以被Spring容器自动检测和注册。
    • 通用注解,适用于任何层次的组件。
      @Component
      public class MyComponent {
      }

  • @Service

    • 标识服务层组件,实际上是@Component的一个特化,用于表示业务逻辑服务。
      @Service
      public class MyService {
      }

  • @Repository

    • 标识持久层组件(dao层),实际上是@Component的一个特化,用于表示数据访问组件。
    • 常用于与数据库交互。
      @Repository
      public class MyRepository {
      }

  • @Controller

    • 标识控制层组件,实际上是@Component的一个特化,用于表示Web控制器。
    • 处理HTTP请求并返回视图或响应数据。
      @Controller
      public class MyController {
      }

  • @RestController

    • 标识RESTful Web服务的控制器,实际上是@Controller和@ResponseBody的结合。
    • 返回的对象会自动序列化为JSON或XML,并写入HTTP响应体中。
      @RestController
      public class MyRestController {
      }

  • @RequestMapping

    • 映射HTTP请求到处理方法上(支持GET、POST、PUT、DELETE等)。
      @Controller
      public class MyController {
          @RequestMapping("/hello")
          public String sayHello() {
              return "hello";
          }
      }

  • @GetMapping、@PostMapping、@PutMapping、@DeleteMapping

    • 映射HTTP请求到处理方法上,是@RequestMapping的简化版本。
      @RestController
      public class MyRestController {
      /*
      @GetMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.GET)
      @PostMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.POST)
      @PutMapping("/users/{userId}") 等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)
      */
      @DeleteMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)
          @GetMapping("/users")
          public List<User> getUsers() {
              return userService.getAllUsers();
          }
      }

  • @ResponseBody

    • 将方法的返回值转换为指定格式(如JSON、XML)作为HTTP响应的内容返回给客户端。
    • 常用于RESTful服务中。
      @RestController
      public class MyRestController {
          @GetMapping("/hello")
          @ResponseBody
          public String sayHello() {
              return "Hello, World!";
          }
      }

  • @RequestBody

    • 将HTTP请求体的内容(如JSON、XML)转换为Java对象。
    • 常用于接收前端传递的数据。
      @RestController
      public class MyRestController {
          @PostMapping("/users")
          public User createUser(@RequestBody User user) {
              return userService.createUser(user);
          }
      }

  • @Autowired

    • 用于自动注入依赖对象。
      @Autowired
      @Qualifier("baseDao")
      private BaseDao baseDao;

  • @Qualifier

    • 用于指定注入特定名称的bean。