Spring Boot 常用注解详解


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 标记方法,表示该方法是一个异步方法。

猜你喜欢

转载自blog.csdn.net/qq_54351538/article/details/129682009