spring 常用注解
在 Spring 框架中,注解是非常重要的,它们简化了 Java 配置,并帮助开发者更轻松地实现依赖注入、事务管理、数据绑定等功能。以下是 Spring 中常用的一些注解及其用途:
1. 核心注解
- @Component
将一个类标注为 Spring 容器管理的 Bean。适用于任何类,通常与 @Autowired 配合使用。
@Component
public class MyComponent {
}
- @Service
@Service 是 @Component 的特化注解,专门用于标注服务层的类。通常表示该类包含业务逻辑。
@Service
public class MyService {
}
- @Repository @Repository 是 @Component 的特化注解,用于标注数据访问层(DAO)。Spring 会为其提供额外的数据库异常处理机制。
@Repository
public class MyRepository {
}
- @Controller 用于标注 Spring MVC 控制器类,处理用户请求。与 @RequestMapping 一起使用来映射请求路径。
@Controller
public class MyController {
}
- @RestController 是 @Controller 和 @ResponseBody 的组合,表示该类是一个 RESTful Web 服务的控制器,返回的对象会自动转换成 JSON 格式。
@RestController
public class MyRestController {
}
2. 依赖注入注解
- @Autowired 用于自动注入依赖。Spring 会根据类型(或名称)自动选择并注入所需的 Bean。
@Autowired
private MyService myService;
- @Inject 是 JSR-330 的注解,也用于依赖注入。与 @Autowired 相似,但通常与其他 DI 容器兼容。
@Inject
private MyService myService;
- @Qualifier 用于指定要注入的 Bean。当容器中有多个相同类型的 Bean 时,可以使用 @Qualifier 来明确选择注入的 Bean。
@Autowired
@Qualifier("specificService")
private MyService myService;
3. 生命周期管理注解
- @PostConstruct 表示在 Bean 初始化完成后自动调用的方法,常用于执行初始化操作。
@PostConstruct
public void init() {
System.out.println("Bean initialized");
}
- @PreDestroy 表示在 Bean 销毁之前自动调用的方法,常用于释放资源等清理工作。
@PreDestroy
public void destroy() {
System.out.println("Bean destroyed");
}
4. 事务管理注解
- @Transactional 用于声明式事务管理,将该注解添加到方法或类上,表示该方法/类中的操作需要支持事务。
@Transactional
public void someServiceMethod() {
// 事务相关操作
}
5. Spring MVC 注解
- @RequestMapping 用于映射 HTTP 请求到指定的控制器方法上。可以指定请求路径、方法类型等。
@RequestMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
- @GetMapping 是 @RequestMapping 的特化注解,专门用于处理 GET 请求。
@GetMapping("/hello")
public String getHello() {
return "Hello, GET!";
}
- @PostMapping 是 @RequestMapping 的特化注解,专门用于处理 POST 请求。
@PostMapping("/submit")
public String submitForm(@RequestBody FormData formData) {
return "Form submitted!";
}
- @PutMapping 是 @RequestMapping 的特化注解,专门用于处理 PUT 请求。
@PutMapping("/update")
public String updateData(@RequestBody Data data) {
return "Data updated!";
}
- @DeleteMapping 是 @RequestMapping 的特化注解,专门用于处理 DELETE 请求。
@DeleteMapping("/delete")
public String deleteData(@RequestParam("id") Long id) {
return "Data deleted!";
}
- @RequestParam 用于提取请求参数。
@RequestMapping("/greet")
public String greet(@RequestParam String name) {
return "Hello, " + name;
}
- @PathVariable 用于提取 URL 路径中的参数。
@GetMapping("/greet/{name}")
public String greet(@PathVariable String name) {
return "Hello, " + name;
}
- @RequestBody 用于绑定 HTTP 请求体到方法参数,常用于处理 JSON 数据。
@PostMapping("/submit")
public String submitForm(@RequestBody FormData formData) {
return "Form submitted!";
}
- @ResponseBody 用于方法上,表示返回的对象会被自动转换为 JSON 或 XML 格式并写入 HTTP 响应体。
@GetMapping("/json")
@ResponseBody
public MyObject getJsonData() {
return new MyObject();
}
- 其他常用注解
- @Value 用于从配置文件或其他外部资源中注入值。支持读取 application.properties、application.yml 文件中的配置。
@Value("${app.name}")
private String appName;
- @Configuration 用于标识一个类是配置类,包含 Bean 定义。通常与 @Bean 一起使用,声明方法返回的对象作为 Spring Bean。
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
- @Bean 用于在 @Configuration 类中定义 Bean。
@Bean
public MyBean myBean() {
return new MyBean();
}