【原创】Springboot 最全的注解总结,看这一篇就够了
Spring Boot常用详解
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架。它提供了许多注解,用于简化开发过程并提供各种功能。下面是一些常用的Spring Boot注解的详细介绍:
@SpringBootApplication
@SpringBootApplication
是一个组合注解,用于标记主类,表示这是一个Spring Boot应用程序的入口点。它包含了以下三个注解的功能:
@Configuration
:将类标记为配置类,用于定义Bean的创建和配置。@EnableAutoConfiguration
:启用自动配置,根据类路径上的依赖自动配置Spring应用程序。@ComponentScan
:扫描指定包及其子包下的组件,将其注册为Spring的Bean。
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
在上面的例子中,@SpringBootApplication
注解标记了MyApp
类,表示这是一个Spring Boot应用程序的入口点。main
方法使用SpringApplication.run()
方法启动应用程序。
@ComponentScan
@ComponentScan
用于扫描并注册带有特定注解的组件。
@ComponentScan("com.example.demo")
public class AppConfig {
// 配置逻辑
}
在上面的例子中,@ComponentScan
注解标记了AppConfig
类,表示扫描并注册com.example.demo
包及其子包中带有@Component
、`
@RestController
@RestController
是一个组合注解,用于标记控制器类,表示这是一个RESTful风格的控制器。它将类中的所有方法的返回值默认为JSON格式。
@RestController
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
在上面的例子中,@RestController
注解标记了MyController
类,表示这是一个RESTful风格的控制器。@GetMapping
注解标记了hello()
方法,表示该方法处理HTTP GET请求,并返回字符串"Hello, World!"。
@RequestMapping
@RequestMapping
用于映射HTTP请求到控制器方法。可以用于类级别和方法级别。
@RequestMapping
是 Spring MVC 中非常重要的注解,它用于将 HTTP 请求映射到特定的处理方法。这个注解有多个属性,以下是其中一些常用的属性:
value
:指定 URL 映射的路径。你可以指定一个字符串或者一个字符串数组。例如:@RequestMapping(value = "/example")
或@RequestMapping(value = {"/example1", "/example2"})
。method
:指定请求方法。你可以指定 GET、POST、PUT、DELETE 等。例如:@RequestMapping(method = RequestMethod.GET)
。params
:指定请求参数。你可以指定查询参数或者表单参数。例如:@RequestMapping(params = "id")
表示请求应该包含一个名为 "id" 的查询参数。headers
:指定请求头。例如:@RequestMapping(headers = "content-type=application/json")
表示请求的内容类型应该是 "application/json"。consumes
:指定请求的媒体类型。例如:@RequestMapping(consumes = "application/json")
表示请求的内容类型应该是 "application/json"。produces
:指定响应的媒体类型。例如:@RequestMapping(produces = "application/json")
表示响应的内容类型应该是 "application/json"。
这些属性可以单独使用,也可以组合在一起使用,根据实际需求进行配置。
下面是一个示例代码:
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
在上面的例子中,@RequestMapping
注解标记了MyController
类,表示该类中的所有方法都映射到"/api"路径下。@GetMapping
注解标记了hello()
方法,表示该方法处理HTTP GET请求,并返回字符串"Hello, World!"。
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping
这些注解用于映射HTTP GET、POST、PUT、DELETE请求到控制器方法。
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
@PostMapping("/user")
public User createUser(@RequestBody User user) {
// 创建用户逻辑
}
}
在上面的例子中,@GetMapping
注解标记了hello()
方法,表示该方法处理HTTP GET请求,并返回字符串"Hello, World!"。@PostMapping
注解标记了createUser()
方法,表示该方法处理HTTP POST请求,并接收一个User
对象作为请求体。
@RequestParam
是 Spring MVC 中用于映射 HTTP 请求参数的注解。它通常用于处理 GET、POST、PUT、DELETE 等请求中的参数。通过在处理方法参数上添加 @RequestParam
注解,可以将请求中的参数映射到方法的参数上。
下面是 @RequestParam
注解的详细用法:
- 用于 GET 请求:
@GetMapping("/example")
public String getExample(@RequestParam("id") String id) {
// 处理逻辑
}
在上面的示例中,@RequestParam("id")
表示请求应该包含一个名为 "id" 的查询参数,并将其映射到方法的 id
参数上。如果请求中没有 "id" 参数,则该方法将返回 HTTP 400 错误。
- 用于 POST 请求:
@PostMapping("/example")
public String postExample(@RequestParam("name") String name, @RequestParam("age") int age) {
// 处理逻辑
}
在上面的示例中,@RequestParam("name")
和 @RequestParam("age")
表示请求应该包含名为 "name" 和 "age" 的表单参数,并将其分别映射到方法的 name
和 age
参数上。如果请求中缺少这些参数,则该方法将返回 HTTP 400 错误。
- 用于处理多个参数:
@GetMapping("/example")
public String getExample(@RequestParam("id") String id, @RequestParam("name") String name) {
// 处理逻辑
}
在上面的示例中,使用 @RequestParam
注解处理多个参数。请求应该包含名为 "id" 和 "name" 的查询参数,并将其分别映射到方法的 id
和 name
参数上。如果请求中缺少这些参数,则该方法将返回 HTTP 400 错误。
- 设置默认值:
@GetMapping("/example")
public String getExample(@RequestParam(value = "id", defaultValue = "0") int id) {
// 处理逻辑
}
在上面的示例中,使用 defaultValue
属性设置默认值。如果请求中没有 "id" 参数,则该方法的 id
参数将默认为 "0"。
- 设置 required 属性:
@GetMapping("/example")
public String getExample(@RequestParam(value = "id", required = false) String id) {
// 处理逻辑
}
在上面的示例中,使用 required
属性设置参数是否必需。将 required
设置为 false
表示该参数是可选的。如果请求中没有该参数,则该方法可以正常执行。
@Autowired
@Autowired
用于自动装配依赖对象。
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
在上面的例子中,@Autowired
注解标记了UserService
类的构造方法,表示自动装配UserRepository
对象。Spring会自动查找UserRepository
的实例并注入到UserService
中。
@Service、@Repository、@Component
这些注解用于标记服务类、数据访问类和通用组件类。
@Service
public class UserService {
// 服务类逻辑
}
@Repository
public class UserRepository {
// 数据访问逻辑
}
@Component
public class MyComponent {
// 通用组件逻辑
}
在上面的例子中,@Service
注解标记了UserService
类,表示这是一个服务类。@Repository
注解标记了UserRepository
类,表示这是一个数据访问类。@Component
注解标记了MyComponent
类,表示这是一个通用组件类。
@Configuration
@Configuration
用于标记配置类,表示这是一个Spring配置类。
@Configuration
public class MyConfig {
// 配置逻辑
}
在上面的例子中,@Configuration
注解标记了MyConfig
类,表示这是一个Spring配置类。可以在该类中定义Bean的创建和配置。
@Import
@Import
用于导入其他配置类。
@Configuration
@Import(MyConfig.class)
public class AppConfig {
// 配置逻辑
}
在上面的例子中,@Import
注解标记了AppConfig
类,表示导入了MyConfig
配置类。这样,AppConfig
类就可以使用MyConfig
中定义的Bean。
@ImportResource
@ImportResource
用于导入XML配置文件。
@Configuration
@ImportResource("classpath:applicationContext.xml")
public class AppConfig {
// 配置逻辑
}
在上面的例子中,@ImportResource
注解标记了AppConfig
类,表示导入了applicationContext.xml
配置文件。这样,AppConfig
类就可以使用applicationContext.xml
中定义的Bean。
@Value
@Value
用于注入属性值。
@Component
public class MyComponent {
@Value("${my.property}")
private String myProperty;
// 其他逻辑
}
在上面的例子中,@Value
注解标记了myProperty
字段,表示注入了名为my.property
的属性值。可以通过${my.property}
的方式在配置文件中定义该属性的值。
@Inject
@Inject
是JSR-330规范中的注解,与@Autowired
功能相似,用于自动装配依赖对象。
@Service
public class UserService {
private UserRepository userRepository;
@Inject
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
在上面的例子中,@Inject
注解标记了UserService
类的构造方法,表示自动装配UserRepository
对象。与@Autowired
相比,@Inject
是JSR-330规范中的注解,更加通用。
@Qualifier
@Qualifier
用于指定注入的Bean的名称。
@Service
public class UserService {
@Autowired
@Qualifier("userRepository")
private UserRepository userRepository;
// 其他逻辑
}
在上面的例子中,@Qualifier
注解标记了userRepository
字段,表示注入名为userRepository
的Bean。当存在多个类型相同的Bean时,可以使用@Qualifier
注解指定要注入的Bean的名称。
@Resource
@Resource
是JSR-250规范中的注解,与@Autowired
功能相似,用于自动装配依赖对象。
@Service
public class UserService {
@Resource
private UserRepository userRepository;
// 其他逻辑
}
在上面的例子中,@Resource
注解标记了userRepository
字段,表示自动装配UserRepository
对象。与@Autowired
相比,@Resource
是JSR-250规范中的注解,更加通用。
@ControllerAdvice 和 @ExceptionHandler
@ControllerAdvice
和 @ExceptionHandler
是 Spring MVC 中用于全局处理异常和自定义全局异常处理的注解。
@ControllerAdvice
@ControllerAdvice
注解可以用于定义全局的控制器类,它提供了一个统一的方法来处理所有控制器的异常。通常,我们会在这个类中定义一些通用的方法来处理所有控制器的异常。
例如:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public ResponseEntity<String> handleException(Exception e) {
// 处理异常逻辑
return new ResponseEntity<>("发生异常: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
在上面的例子中,我们使用 @ControllerAdvice
注解定义了一个全局的控制器类 GlobalExceptionHandler
,然后使用 @ExceptionHandler
注解来处理所有控制器抛出的异常。如果发生异常,该方法会被调用,并返回一个状态为 INTERNAL_SERVER_ERROR
的 HTTP 响应。
@ExceptionHandler
@ExceptionHandler
注解用于在特定的控制器类或方法中处理异常。当控制器方法抛出异常时,Spring MVC 会自动调用被 @ExceptionHandler
注解的方法来处理异常。
例如:
@RestController
public class MyController {
@GetMapping("/hello")
public String sayHello() {
throw new RuntimeException("自定义异常");
}
@ExceptionHandler(value = RuntimeException.class)
public ResponseEntity<String> handleRuntimeException(RuntimeException e) {
// 处理异常逻辑
return new ResponseEntity<>("发生自定义异常: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
在上面的例子中,我们在 MyController
类中定义了一个抛出 RuntimeException
的方法 sayHello()
,然后在同一个类中使用 @ExceptionHandler
注解来处理 RuntimeException
类型的异常。如果 sayHello()
方法抛出了 RuntimeException
,该方法会被调用,并返回一个状态为 INTERNAL_SERVER_ERROR
的 HTTP 响应。
lombok 相关注解
@Data
:
-
作用:
@Data
注解是Lombok库提供的注解,它用于自动生成类的Getter、Setter、equals()
、hashCode()
和toString()
方法,以减少样板代码。 -
示例代码:
import lombok.Data; @Data public class Person { private String name; private int age; }
-
实例化和使用示例:
public class Main { public static void main(String[] args) { Person person = new Person(); person.setName("Alice"); person.setAge(30); System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } }
@Setter
和 @Getter
:
-
作用:
@Setter
和@Getter
注解分别用于生成类的Setter和Getter方法,用于简化属性的访问和设置。 -
示例代码:
import lombok.Getter; import lombok.Setter; public class Car { @Getter @Setter private String make; @Getter @Setter private String model; }
-
实例化和使用示例:
public class Main { public static void main(String[] args) { Car car = new Car(); car.setMake("Toyota"); car.setModel("Camry"); System.out.println("Make: " + car.getMake()); System.out.println("Model: " + car.getModel()); } }
@Log4j2
:
-
作用:
@Log4j2
是Lombok库的注解,用于自动生成Log4j2的日志记录器字段,方便日志记录。 -
示例代码:
import lombok.extern.log4j.Log4j2; @Log4j2 public class LoggerExample { public void logMessage() { log.debug("Debug message"); log.info("Info message"); log.error("Error message"); } }
-
实例化和使用示例:
public class Main { public static void main(String[] args) { LoggerExample loggerExample = new LoggerExample(); loggerExample.logMessage(); } }
@NoArgsConstructor
, @RequiredArgsConstructor
和 @AllArgsConstructor
:
-
作用:这些注解用于生成类的构造方法,包括无参构造方法、包含必填参数的构造方法和包含所有字段的构造方法。
-
示例代码:
import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; @NoArgsConstructor public class Person { private String name; private int age; } @RequiredArgsConstructor public class Book { private final String title; private final String author; } @AllArgsConstructor public class Product { private String name; private double price; }
-
实例化和使用示例:
public class Main { public static void main(String[] args) { Person person1 = new Person(); // 使用无参构造方法 Book book = new Book("The Catcher in the Rye", "J.D. Salinger"); // 使用包含必填参数的构造方法 Product product = new Product("Laptop", 999.99); // 使用包含所有字段的构造方法 } }
这些Lombok注解可以显著简化Java类的编写,减少样板代码,提高代码的可读性和可维护性。要使用这些注解,需要在项目中添加Lombok库的依赖并在IDE中启用相应的Lombok插件或功能。
就這?給你加倆
@DependsOn
@Profile
@EnableAutoConfiguration
@Scheduled
@Entity
@Table
@Query
@Transactional
@EnableCaching and @Cacheable
@Async
@JsonIgnore and @JsonProperty
@EventListener
@ConditionalExpression
@PadVariabele
@ModelAttribute
@Lazy
@Secured
@PreAuthorize
@Valid