Spring和Spring MVC提供了一系列注解来简化开发,提高代码的可读性和可维护性。以下是一些常用的注解及其说明:
Spring常用注解
-
@Component
- 用于标注一个类为Spring的组件,使其能够通过依赖注入进行管理。
@Component public class MyComponent { // Class implementation }
-
@Service
- 用于标注服务层的组件,实际上是
@Component
的一个特殊化形式。
@Service public class MyService { // Service implementation }
- 用于标注服务层的组件,实际上是
-
@Repository
- 用于标注数据访问层的组件,也是
@Component
的特殊化形式,通常用于DAO类。
@Repository public class MyRepository { // Repository implementation }
- 用于标注数据访问层的组件,也是
-
@Controller
- 用于标注控制器层的组件,通常与Spring MVC一起使用。
@Controller public class MyController { // Controller implementation }
-
@Autowired
- 用于自动注入依赖,可以用于字段、构造器或setter方法上。
@Autowired private MyService myService;
-
@Qualifier
- 用于配合
@Autowired
注解指定需要注入的具体实现。
@Autowired @Qualifier("specificBean") private MyService myService;
- 用于配合
-
@Scope
- 用于指定Spring Bean的作用域,如
singleton
、prototype
等。
@Component @Scope("prototype") public class MyPrototypeBean { // Bean implementation }
- 用于指定Spring Bean的作用域,如
-
@Value
- 用于注入属性值,可以从属性文件或系统属性中获取值。
@Value("${my.property}") private String myProperty;
-
@Configuration
- 用于定义配置类,替代传统的XML配置文件。
@Configuration public class AppConfig { // Bean definitions }
-
@Bean
- 用于定义一个Spring Bean的方法,通常与
@Configuration
一起使用。
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
- 用于定义一个Spring Bean的方法,通常与
-
@PropertySource
- 用于指定属性文件的位置,以便在
@Value
注解中使用。
@Configuration @PropertySource("classpath:application.properties") public class AppConfig { // Configuration implementation }
- 用于指定属性文件的位置,以便在
-
@PostConstruct
- 用于标注在Bean初始化完成后需要执行的方法。
@Component public class MyComponent { @PostConstruct public void init() { // Initialization logic } }
-
@PreDestroy
- 用于标注在Bean销毁前需要执行的方法。
@Component public class MyComponent { @PreDestroy public void destroy() { // Cleanup logic } }
Spring MVC常用注解
-
@RequestMapping
- 用于映射请求到控制器的方法或类。
@Controller @RequestMapping("/api") public class MyController { @RequestMapping("/hello") public String hello() { return "hello"; } }
-
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping
- 用于简化
@RequestMapping
注解,分别对应HTTP方法GET、POST、PUT、DELETE、PATCH。
@Controller @RequestMapping("/api") public class MyController { @GetMapping("/hello") public String hello() { return "hello"; } }
- 用于简化
-
@PathVariable
- 用于绑定URL中的占位符到方法参数。
@GetMapping("/user/{id}") public String getUser(@PathVariable("id") Long id) { return "user"; }
-
@RequestParam
- 用于绑定请求参数到方法参数。
@GetMapping("/search") public String search(@RequestParam("query") String query) { return "search"; }
-
@RequestBody
- 用于将请求体绑定到方法参数上,通常用于处理JSON请求。
@PostMapping("/user") public String createUser(@RequestBody User user) { return "user"; }
-
@ResponseBody
- 用于将方法返回值直接写入HTTP响应体,通常用于返回JSON数据。
@GetMapping("/user") @ResponseBody public User getUser() { return new User(); }
-
@ModelAttribute
- 用于绑定请求参数到模型属性或预处理模型数据。
@GetMapping("/form") public String form(@ModelAttribute("user") User user) { return "form"; }
-
@SessionAttributes
- 用于声明哪些模型属性应存储在会话中。
@Controller @SessionAttributes("user") public class MyController { // Controller implementation }
-
@ExceptionHandler
- 用于定义全局异常处理方法。
@Controller public class MyController { @ExceptionHandler(Exception.class) public String handleException() { return "error"; } }
-
@RestController
- 组合了
@Controller
和@ResponseBody
,用于创建RESTful Web服务。
@RestController @RequestMapping("/api") public class MyRestController { @GetMapping("/user") public User getUser() { return new User(); } }
- 组合了
这些注解极大地简化了Spring和Spring MVC应用程序的开发,使得代码更加简洁和易读。