Spring和Spring Boot框架通过丰富的注解集简化了Java开发,使得配置更加简洁且易于理解。
下面是一些常用的Spring和Spring Boot注解及其使用方式的简介:
目录
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应用的开发。