Spring Boot 常用注解详解
- @SpringBootApplication
- @Controller
- @RequestMapping
- @RestController
- @Autowired
- @Component
- @Configuration
- @EnableAutoConfiguration
- @GetMapping/@PostMapping/@PutMapping/@DeleteMapping
- @PathVariable
- @RequestParam
- @ResponseBody
- @Service
- @Transactional
- @ComponentScan
- @ConfigurationProperties
- @Value
- @Conditional
- @Async
Spring Boot 是一款非常流行的 Java Web 框架,它提供了大量的注解用于简化开发。本文将详细解释 Spring Boot 中常用的注解,帮助更好地理解和使用 Spring Boot。
@SpringBootApplication
@SpringBootApplication 是一个组合注解,它包括了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan。用于标记一个 Spring Boot 主类。它会自动扫描主类所在包及其子包下的组件。
@Controller
@Controller 是 Spring MVC 中的注解,用于标记一个类是 Web 控制器。当请求到达时,Spring MVC 会通过该注解找到对应的方法进行处理。在 Spring Boot 中,它与 @RestController 一起被用于构建 RESTful API。
@RequestMapping
@RequestMapping 用于将 HTTP 请求映射到对应的方法上。可以用于类或方法上。例如:
@Controller
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String hello() {
return "Hello, World!";
}
}
这里用 @RequestMapping 标记了类,表示该类下的所有方法都是以 /hello 为前缀的。用 @GetMapping 标记方法,表示该方法只接受 GET 请求。
@RestController
@RestController 是 Spring MVC 中的注解,它是 @Controller 和@ResponseBody 的结合体。在 Spring Boot 中,它常用于构建 RESTful API。
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
这里用 @RestController 标记类,表示该类是一个 RESTful API 控制器。用 @GetMapping 标记方法,表示该方法只接受 GET 请求。返回值将自动转换为 JSON 格式。
@Autowired
@Autowired 用于自动注入依赖。可以用于构造函数、属性和方法上。例如:
@Service
public class HelloService {
private final HelloRepository repository;
public HelloService(@Autowired HelloRepository repository) {
this.repository = repository;
}
public String hello() {
return repository.getHello();
}
}
这里用 @Autowired 标记构造函数,表示 HelloRepository 将自动注入到 HelloService 中。
@Component
@Component 是 Spring 的核心注解之一,用于标记一个类为 Spring 组件。被标记的类会被 Spring 自动扫描并纳入 Spring 容器管理。
@Configuration
@Configuration 用于标记一个类为 Spring 配置类。配置类可以包含 @Bean 注解的方法,用于配置 Spring Bean。
@Configuration
public class AppConfig {
@Bean
public HelloService helloService() {
return new HelloService(helloRepository());
}
@Bean
public HelloRepository helloRepository() {
return new HelloRepositoryImpl();
}
这里用 @Configuration 标记类,表示该类是一个 Spring 配置类。用 @Bean 标记方法,表示该方法返回的对象是一个 Spring Bean。
@EnableAutoConfiguration
@EnableAutoConfiguration 用于开启 Spring Boot 的自动配置功能。它会根据项目依赖的不同自动配置相应的组件。通常情况下,只需要在主类上添加该注解即可。
@GetMapping/@PostMapping/@PutMapping/@DeleteMapping
@GetMapping、@PostMapping、@PutMapping 和 @DeleteMapping 分别用于标记 HTTP 请求对应的方法是 GET、POST、PUT 和 DELETE。例如:
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
@PostMapping("/hello")
public String postHello() {
return "Hello, POST!";
}
@PutMapping("/hello")
public String putHello() {
return "Hello, PUT!";
}
@DeleteMapping("/hello")
public String deleteHello() {
return "Hello, DELETE!";
}
}
这里分别用 @GetMapping、@PostMapping、@PutMapping 和 @DeleteMapping 标记了四个方法,表示分别对应 GET、POST、PUT 和 DELETE 请求。
@PathVariable
@PathVariable 用于获取 URL 路径中的参数。例如:
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/{name}")
public String hello(@PathVariable String name) {
return "Hello, " + name + "!";
}
}
这里用 @GetMapping 标记方法,表示该方法只接受 GET 请求。用 @PathVariable 标记参数,表示该参数是从 URL 路径中获取的。
@RequestParam
@RequestParam 用于获取 HTTP 请求中的参数。例如:
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello(@RequestParam String name) {
return "Hello, " + name + "!";
}
}
这里用 @GetMapping 标记方法,表示该方法只接受 GET 请求。用 @RequestParam 标记参数,表示该参数是从 HTTP 请求中获取的。
@ResponseBody
@ResponseBody 用于将方法返回值转换为 HTTP 响应体。通常与 @Controller 或 @RestController 一起使用。例如:
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
这里用 @GetMapping 标记方法,表示该方法只接受 GET 请求。用 @ResponseBody 标记方法,表示该方法的返回值将作为 HTTP 响应体返回。
@Service
@Service 用于标记一个类为服务类。通常情况下,服务类用于实现业务逻辑。被标记的类会被 Spring 自动扫描并纳入 Spring 容器管理。
@Transactional
@Transactional 用于标记一个方法或类为事务性方法或类。如果一个方法或类被标记为 @Transactional,那么当该方法或类中的任何数据库操作失败时,事务会自动回滚。
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void addUser(User user) {
userDao.addUser(user);
}
}
这里用 @Service 标记类,表示该类是一个服务类。用 @Autowired 标记属性,表示该属性需要自动注入。用 @Transactional 标记方法,表示该方法是一个事务性方法。
@ComponentScan
@ComponentScan 用于自动扫描指定包下的所有组件,并将其纳入 Spring 容器管理。例如:
@SpringBootApplication
@ComponentScan("com.example.demo")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
这里用 @SpringBootApplication 标记主类,表示该类是一个 Spring Boot 应用。用 @ComponentScan 标记主类,表示需要扫描包 com.example.demo 下的所有组件。
@ConfigurationProperties
@ConfigurationProperties 用于将配置文件中的属性值注入到一个对象中。例如:
@Configuration
@ConfigurationProperties(prefix = "myconfig")
public class MyConfig {
private String name;
private String version;
// getters and setters
}
这里用 @Configuration 标记类,表示该类是一个 Spring 配置类。用 @ConfigurationProperties 标记类,表示需要将配置文件中以 myconfig 为前缀的属性注入到该类对应的对象中。
@Value
@Value 用于将配置文件中的属性值注入到一个属性中。例如:
@Service
public class UserService {
@Value("${user.age}")
private int age;
// ...
}
这里用 @Service 标记类,表示该类是一个服务类。用 @Value 标记属性,表示需要将配置文件中 user.age 属性的值注入到该属性中。
@Conditional
@Conditional 用于在特定条件下启用某个组件。例如:
@Configuration
@Conditional(MyCondition.class)
public class MyConfig {
// ...
}
这里用 @Configuration 标记类,表示该类是一个 Spring 配置类。用 @Conditional 标记类,表示在 MyCondition 条件下启用该组件。
@Async
@Async 用于标记一个方法为异步方法。异步方法会在另一个线程中执行,而不会阻塞当前线程。例如:
@Service
public class UserService {
@Async
public void sendEmail(String email, String content) {
// 发送邮件
}
}
这里用 @Service 标记类,表示该类是一个服务类。用 @Async 标记方法,表示该方法是一个异步方法。