Spring Boot常用注解说明
Spring Boot 是一个基于 Spring 框架的项目,它通过简化配置来帮助开发者快速构建微服务和其他应用程序。在 Spring Boot 中,注解(Annotations)扮演着非常重要的角色,它们用于减少配置和提高代码的可读性。以下是一些常用的 Spring Boot 注解及其详解:
-
@SpringBootApplication
- 组合了
@Configuration
、@EnableAutoConfiguration
和@ComponentScan
注解。 - 表明该类是一个 Spring Boot 应用的主类。
1 2 3 4 5 6 7 8 9
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } }
- 组合了
-
@RestController
- 组合了
@Controller
和@ResponseBody
注解。 - 表明该类是一个控制器,并且所有的方法返回值都将作为 HTTP 响应的正文。
1 2 3 4 5 6 7 8 9 10
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.GetMapping; @RestController public class MyController { @GetMapping("/hello") public String hello() { return "Hello, World!"; } }
- 组合了
-
@RequestMapping
- 将 HTTP 请求映射到处理器方法。
- 可以指定请求类型和路径。
1 2 3 4 5 6 7 8 9 10 11
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class MyController { @RequestMapping(value = "/greeting", method = RequestMethod.GET) public String greeting() { return "greeting"; } }
-
@GetMapping / @PostMapping / @PutMapping / @DeleteMapping
- 特定类型的
@RequestMapping
快捷方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
@GetMapping("/users") public List<User> getAllUsers() { // ... } @PostMapping("/users") public User createUser(@RequestBody User user) { // ... } @PutMapping("/users/{id}") public User updateUser(@PathVariable Long id, @RequestBody User user) { // ... } @DeleteMapping("/users/{id}") public void deleteUser(@PathVariable Long id) { // ... }
- 特定类型的
-
@Autowired
- 自动注入依赖的组件。可以用于字段、构造器、设置方法和普通方法。
1 2 3 4 5 6 7 8 9 10 11 12 13
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } // ... }
-
@Service
- 用于标注服务层组件,通常用于业务逻辑处理。
1 2 3 4
@Service public class UserService { // ... }
-
@Repository
- 用于标注数据访问组件,即DAO组件,表明该类用于数据库操作。
1 2 3 4 5 6
import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends JpaRepository<User, Long> { // ... }
-
@Component
- 用于标注组件,表明该类由 Spring 管理,通常用于非服务层和非数据层的组件。
1 2 3 4
@Component public class MyComponent { // ... }
-
@Configuration
- 用于定义配置类,可以替代传统的XML配置文件,通常用于定义Bean的创建。
1 2 3 4 5 6 7
@Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); } }
-
@Bean
- 在配置类中声明一个 Bean,可以指定Bean的作用域、生命周期等。
1 2 3 4 5 6 7
@Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); } }
-
@Value
- 注入外部配置的值,可以用于字段、构造器、设置方法。
1 2 3 4 5 6 7 8 9
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class MyComponent { @Value("${my.property}") private String myProperty; // ... }
-
@PathVariable
- 从 URL 中提取变量值,可以指定参数是否必须。
1 2 3 4
@GetMapping("/users/{id}") public User getUserById(@PathVariable Long id) { // ... }
-
@RequestParam
- 从请求参数中提取值。
1 2 3 4
@GetMapping("/users") public List<User> getUsersByStatus(@RequestParam String status) { // ... }
-
@RequestBody
- 将 HTTP 请求体绑定到方法参数。
1 2 3 4
@PostMapping("/users") public User createUser(@RequestBody User user) { // ... }
-
@ResponseBody
- 将方法返回值写入 HTTP 响应体。
1 2 3 4 5 6 7 8
@Controller public class MyController { @ResponseBody @GetMapping("/hello") public String hello() { return "Hello, World!"; } }
-
@EnableAutoConfiguration
- 根据添加的 jar 依赖自动配置项目。
1 2 3 4 5 6
@SpringBootApplication // 包含 @EnableAutoConfiguration public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } }
-
@Profile
- 指定某些 Bean 只在特定的环境下创建。
1 2 3 4 5
@Configuration @Profile("dev") public class DevConfig { // ... }
-
@Lazy
- 延迟加载 Bean。
1 2 3 4 5 6 7 8 9 10
@Service public class MyService { private final MyDependency myDependency; @Autowired public MyService(@Lazy MyDependency myDependency) { this.myDependency = myDependency; } // ... }
-
@Transactional
- 声明事务管理。
1 2 3 4 5 6 7 8 9
import org.springframework.transaction.annotation.Transactional; @Service public class MyService { @Transactional public void doSomething() { // ... } }
-
@Cacheable
- 声明缓存方法的结果。
1 2 3 4 5 6 7 8 9
import org.springframework.cache.annotation.Cacheable; @Service public class MyService { @Cacheable("users") public User findUser(String user) { // ... } }
这些注解和代码示例应该能帮助你更好地理解和使用 Spring Boot 中的注解。