Bootstrap

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)来更明确地表达组件的角色。

@Component
public class MyComponent {
    public void doSomething() {
        System.out.println("Doing something...");
    }
}

2. @Service

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

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

@Service
public class MyService {
    public void performService() {
        System.out.println("Performing service...");
    }
}

3. @Repository

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

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

@Repository
public class MyRepository {
    public void save() {
        System.out.println("Saving data...");
    }
}

4. @Controller

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

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

@Controller
public class MyController {
    @GetMapping("/hello")
    @ResponseBody
    public String sayHello() {
        return "Hello, World!";
    }
}

5. @RestController

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

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

@RestController
public class MyRestController {
    @GetMapping("/greet")
    public String greet() {
        return "Greetings!";
    }
}

6. @Autowired

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

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

@Component
public class MyComponent {
    private final MyService myService;

    @Autowired
    public MyComponent(MyService myService) {
        this.myService = myService;
    }

    public void execute() {
        myService.performService();
    }
}

7. @Value

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

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

@Component
public class MyComponent {
    @Value("${my.property}")
    private String myProperty;

    public void printProperty() {
        System.out.println("Property value: " + myProperty);
    }
}

8. @Configuration

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

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

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

9. @Bean

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

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

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

10. @SpringBootApplication

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

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

@SpringBootApplication
public class MySpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApplication.class, args);
    }
}

11. @EnableAutoConfiguration

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

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

@Configuration
@EnableAutoConfiguration
public class MyAutoConfiguration {
}

12. @ComponentScan

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

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

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

13. @Conditional

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

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

@Configuration
public class ConditionalConfig {
    @Bean
    @Conditional(MyCondition.class)
    public MyService myService() {
        return new MyService();
    }
}

14. @Profile

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

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

@Configuration
public class ProfileConfig {
    @Bean
    @Profile("dev")
    public MyService devService() {
        return new MyService("Development Service");
    }

    @Bean
    @Profile("prod")
    public MyService prodService() {
        return new MyService("Production Service");
    }
}

15. @Scope

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

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

@Component
@Scope("prototype")
public class MyPrototypeBean {
    // Bean will have prototype scope
}

16. @Lazy

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

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

@Component
@Lazy
public class MyLazyBean {
    public MyLazyBean() {
        System.out.println("MyLazyBean initialized");
    }
}

17. @PostConstruct 和 @PreDestroy

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

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

@Component
public class MyComponent {
    @PostConstruct
    public void init() {
        System.out.println("MyComponent initialized");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("MyComponent about to be destroyed");
    }
}

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

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;