• Spring和Spring Boot常用注解介绍及使用


    Spring和Spring Boot框架通过丰富的注解集简化了Java开发,使得配置更加简洁且易于理解。

    下面是一些常用的Spring和Spring Boot注解及其使用方式的简介:

    目录

    1. @Component

    2. @Service

    3. @Repository

    4. @Controller

    5. @RestController

    6. @Autowired

    7. @Value

    8. @Configuration

    9. @Bean

    10. @SpringBootApplication

    11. @EnableAutoConfiguration

    12. @ComponentScan

    13. @Conditional

    14. @Profile

    15. @Scope

    16. @Lazy

    17. @PostConstruct 和 @PreDestroy


    1. @Component

    概述: @Component是一个通用的Spring管理的Bean注解。

    使用场景: 任何Spring管理的组件都可以使用@Component,但通常使用其特化注解(如@Service@Repository@Controller)来更明确地表达组件的角色。

    1. @Component
    2. public class MyComponent {
    3. public void doSomething() {
    4. System.out.println("Doing something...");
    5. }
    6. }

    2. @Service

    概述: @Service@Component的特化,专门用于标识服务层的组件。

    使用场景: 标识业务逻辑层的组件,表明该类承担业务服务功能。

    1. @Service
    2. public class MyService {
    3. public void performService() {
    4. System.out.println("Performing service...");
    5. }
    6. }

    3. @Repository

    概述: @Repository@Component的特化,通常用于数据访问层。

    使用场景: 用于DAO层,表明该类负责数据库操作,并启用自动异常转换。

    1. @Repository
    2. public class MyRepository {
    3. public void save() {
    4. System.out.println("Saving data...");
    5. }
    6. }

    4. @Controller

    概述: @Controller@Component的特化,标识Spring MVC的控制器类。

    使用场景: 用于标识控制器类,处理HTTP请求并返回视图。

    1. @Controller
    2. public class MyController {
    3. @GetMapping("/hello")
    4. @ResponseBody
    5. public String sayHello() {
    6. return "Hello, World!";
    7. }
    8. }

    5. @RestController

    概述: @RestController@Controller@ResponseBody的组合注解。

    使用场景: 用于创建RESTful web服务,返回JSON或XML响应。

    1. @RestController
    2. public class MyRestController {
    3. @GetMapping("/greet")
    4. public String greet() {
    5. return "Greetings!";
    6. }
    7. }

    6. @Autowired

    概述: @Autowired用于自动注入依赖。

    使用场景: 在需要依赖注入的地方(构造函数、字段、方法)使用,Spring会自动满足依赖需求。

    1. @Component
    2. public class MyComponent {
    3. private final MyService myService;
    4. @Autowired
    5. public MyComponent(MyService myService) {
    6. this.myService = myService;
    7. }
    8. public void execute() {
    9. myService.performService();
    10. }
    11. }

    7. @Value

    概述: @Value用于注入属性值。

    使用场景: 注入配置文件中的值或系统环境变量。

    1. @Component
    2. public class MyComponent {
    3. @Value("${my.property}")
    4. private String myProperty;
    5. public void printProperty() {
    6. System.out.println("Property value: " + myProperty);
    7. }
    8. }

    8. @Configuration

    概述: @Configuration标识配置类,相当于XML配置文件。

    使用场景: 定义Bean并进行配置。

    1. @Configuration
    2. public class AppConfig {
    3. @Bean
    4. public MyService myService() {
    5. return new MyService();
    6. }
    7. }

    9. @Bean

    概述: @Bean用于定义一个Bean。

    使用场景: 在配置类中使用,用于显式声明一个Bean。

    1. @Configuration
    2. public class AppConfig {
    3. @Bean
    4. public MyService myService() {
    5. return new MyService();
    6. }
    7. }

    10. @SpringBootApplication

    概述: @SpringBootApplication@Configuration@EnableAutoConfiguration@ComponentScan的组合注解。

    使用场景: 标识Spring Boot主配置类,并启动自动配置和组件扫描。

    1. @SpringBootApplication
    2. public class MySpringBootApplication {
    3. public static void main(String[] args) {
    4. SpringApplication.run(MySpringBootApplication.class, args);
    5. }
    6. }

    11. @EnableAutoConfiguration

    概述: @EnableAutoConfiguration让Spring Boot基于类路径中的依赖自动配置Spring应用上下文。

    使用场景: 启用自动配置功能,大多数情况下不需要单独使用,因为@SpringBootApplication已经包含它。

    1. @Configuration
    2. @EnableAutoConfiguration
    3. public class MyAutoConfiguration {
    4. }

    12. @ComponentScan

    概述: @ComponentScan用于扫描指定包中的组件。

    使用场景: 在配置类中使用,指定要扫描的包路径。

    1. @Configuration
    2. @ComponentScan(basePackages = "com.example")
    3. public class MyComponentScanConfig {
    4. }

    13. @Conditional

    概述: @Conditional根据条件决定是否实例化一个Bean。

    使用场景: 在配置类中使用,配合条件类实现按条件装配。

    1. @Configuration
    2. public class ConditionalConfig {
    3. @Bean
    4. @Conditional(MyCondition.class)
    5. public MyService myService() {
    6. return new MyService();
    7. }
    8. }

    14. @Profile

    概述: @Profile根据环境配置加载特定的Bean。

    使用场景: 在开发、测试、生产等不同环境下加载不同的Bean。

    1. @Configuration
    2. public class ProfileConfig {
    3. @Bean
    4. @Profile("dev")
    5. public MyService devService() {
    6. return new MyService("Development Service");
    7. }
    8. @Bean
    9. @Profile("prod")
    10. public MyService prodService() {
    11. return new MyService("Production Service");
    12. }
    13. }

    15. @Scope

    概述: @Scope定义Bean的作用域(单例、原型等)。

    使用场景: 在需要特定作用域的Bean定义中使用。

    1. @Component
    2. @Scope("prototype")
    3. public class MyPrototypeBean {
    4. // Bean will have prototype scope
    5. }

    16. @Lazy

    概述: @Lazy指定Bean的延迟初始化。

    使用场景: 在需要懒加载的Bean定义中使用,减少启动时间。

    1. @Component
    2. @Lazy
    3. public class MyLazyBean {
    4. public MyLazyBean() {
    5. System.out.println("MyLazyBean initialized");
    6. }
    7. }

    17. @PostConstruct 和 @PreDestroy

    概述: @PostConstruct@PreDestroy分别用于在Bean初始化后和销毁前执行特定方法。

    使用场景: 在Bean生命周期的特定点执行自定义逻辑。

    1. @Component
    2. public class MyComponent {
    3. @PostConstruct
    4. public void init() {
    5. System.out.println("MyComponent initialized");
    6. }
    7. @PreDestroy
    8. public void destroy() {
    9. System.out.println("MyComponent about to be destroyed");
    10. }
    11. }

    这些注解在Spring和Spring Boot中有机地结合在一起,形成了一个功能丰富、易于使用的框架体系,极大地简化了Java应用的开发。

  • 相关阅读:
    Kafka消费组无法消费问题排查实战
    C++11标准模板(STL)- 算法(std::stable_partition)
    从零开始学习 Java:简单易懂的入门指南之线程同步(三十五)
    系统压力测试:保障系统性能与稳定的重要措施
    云计算:常用运维软件工具
    实时数据推送并非只有WebSocket一种选择
    正则系列之RegExp使用正则表达式
    2023研究生数学建模D题思路
    stm32cubemx hal学习记录:FreeRTOS互斥量
    经典题记录 字符串相加/相乘
  • 原文地址:https://blog.csdn.net/qq_35759769/article/details/139806128