Наиболее распространенные и важные аннотации Spring Boot
Spring Boot поставляется с большим количеством аннотаций, которые используются для настройки и настройки поведения различных компонентов. Вот полный список аннотаций в Spring Boot:
@SpringBootApplication
: эта аннотация используется для обозначения основного класса приложения Spring Boot. Он сочетает в себе функциональность аннотаций @Configuration
, @EnableAutoConfiguration
и @ComponentScan
.
@Configuration
: Он сообщает Spring, что класс содержит определения компонентов и логику конфигурации. Аннотируя класс @Configuration
, Spring рассматривает его как источник определений bean-компонентов, а методы внутри класса, помеченные @Bean
, используются для определения bean-компонентов.
@ComponentScan
: эта аннотация используется для указания пакетов, которые следует сканировать на наличие компонентов Spring, таких как контроллеры, службы и репозитории.
@EnableAutoConfiguration
: эта аннотация используется для включения автоматической настройки приложения Spring Boot на основе пути к классам и свойств в файле application.properties или application.yml.
@RestController
: эта аннотация используется для обозначения класса как контроллера, который обрабатывает входящие HTTP-запросы и возвращает ответ в форме JSON, XML или других форматов.
@Controller
: Эта аннотация используется для обозначения класса как контроллера, который обрабатывает входящие HTTP-запросы и возвращает ответ в форме представления.
@Service
: Эта аннотация используется для обозначения класса как службы, предоставляющей приложению бизнес-логику.
@Repository
: Эта аннотация используется для обозначения класса как репозитория, обеспечивающего доступ к данным приложению.
@Autowired
: Эта аннотация используется для внедрения зависимостей в класс. Его можно использовать для внедрения зависимостей в конструкторы, поля или методы установки.
@RequestMapping
: Эта аннотация используется для обработки HTTP-запросов к соответствующему методу контроллера. Он сопоставляет определенные методы контроллера с предоставленной конечной точкой, поддерживая различные методы HTTP, такие как GET, POST, PUT, DELETE и т. д. Он обеспечивает гибкое сопоставление URI, сопоставление параметров запроса и согласование типа контента. @RequestMapping
является основой других специализированных аннотаций, таких как @GetMapping
, @PostMapping
и т. д.
@RequestBody
: аннотация @RequestBody используется для извлечения тела запроса из HTTP-запроса и привязки его к параметру метода в контроллере. Он позволяет получать данные в теле запроса, обычно в формате JSON или XML, и преобразовывать их в объект Java.
@RestController public class UserController { private List<User> users = new ArrayList<>(); // Endpoint to create a new user @PostMapping("/users") public ResponseEntity<String> createUser(@RequestBody User user) { users.add(user); return ResponseEntity.ok("User created successfully!"); } }
@ResponseBody
: аннотация @ResponseBody используется для указания того, что возвращаемое значение метода должно быть записано непосредственно в тело ответа HTTP. Он преобразует возвращаемое значение в соответствующий формат, например JSON или XML.
@GetMapping("/users/{id}") public @ResponseBody User getUserDetails(@PathVariable Long id) { return findUserById(id); }
@GetMapping
: Эта аннотация используется для обработки HTTP-запросов GET к соответствующему методу в контроллере. Он вызывается для обработки запроса и получения ответа.
@PostMapping
: Эта аннотация используется для обработки запросов HTTP POST к соответствующему методу в контроллере. Он используется для создания новых ресурсов или отправки данных на сервер.
@PutMapping
: Эта аннотация используется для обработки HTTP-запросов PUT к соответствующему методу в контроллере. Он используется для обновления или замены ресурса по указанному URI.
@DeleteMapping
: Эта аннотация используется для обработки HTTP-запросов DELETE к соответствующему методу в контроллере. Он используется для удаления ресурса с сервера.
@PatchMapping
: Эта аннотация используется для обработки запросов HTTP PATCH к соответствующему методу в контроллере. В отличие от PUT, PATCH используется для частичного обновления ресурса. Позволяет изменять только отдельные поля ресурса, а не заменять весь ресурс.
@PathVariable
: Эта аннотация используется для извлечения значений из пути URI URL-адреса и привязки их к параметрам метода в контроллере. Это позволяет захватывать динамические части URL-адреса и использовать их в качестве входных данных.
@GetMapping("/users/{id}") public ResponseEntity<User> getUserDetails(@PathVariable Long id) { User user = findUserById(id); if (user == null) { return ResponseEntity.notFound().build(); } return ResponseEntity.ok(user); }
Использование нескольких аннотаций @PathVariable
@GetMapping("/users/{countryName}/{userName}") public ResponseEntity<User> getUserDetails(@PathVariable("countryName") String cname, @PathVariable("userName") String uname) { }
@RequestParam
: аннотация @RequestParam используется для извлечения параметров запроса из URL-адреса запроса и привязки их к параметрам метода в контроллере. Он позволяет вам захватывать пары ключ-значение из строки запроса URL-адреса и использовать их в качестве входных данных для обработки.
GET http://localhost:8080/users/search?name=John // Endpoint to search users by name @GetMapping("/users/search") public ResponseEntity<List<User>> searchUsersByName(@RequestParam String name) { }
С несколькими параметрами
GET http://localhost:8080/products/search?name=apple&category=electronics // Endpoint to search products by name and category @GetMapping("/products/search") public ResponseEntity<List<Product>> searchProducts(@RequestParam String name, @RequestParam String category) { }
@ExceptionHandler
: ExceptionHandler используется для более контролируемой и централизованной обработки исключений. Это позволяет определять методы в контроллере или отдельный класс обработки исключений, который будет обрабатывать определенные исключения и возвращать специальные ответы при возникновении этих исключений. Это особенно полезно для предоставления удобных для пользователя сообщений об ошибках и обеспечения четкого разделения задач в коде.
Класс специального исключения:
public class ResourceNotFoundException extends RuntimeException { public ResourceNotFoundException(String message) { super(message); } }
Метод обработчика исключений в контроллере:
import org.springframework.web.bind.annotation.*; @RestController public class MyController { @GetMapping("/resource/{id}") public String getResource(@PathVariable Long id) { // Simulate a resource not found scenario throw new ResourceNotFoundException("Resource with id " + id + " not found"); } @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) { return ResponseEntity.status(HttpStatus.NOT_FOUND) .body(ex.getMessage()); } }
@RestControllerAdvice
: аннотация RestControllerAdvice используется для создания глобального обработчика исключений, который может обрабатывать исключения на нескольких контроллерах. Эта аннотация особенно полезна для централизации логики обработки исключений в одном месте для всего приложения.
import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) { return ResponseEntity.status(HttpStatus.NOT_FOUND) .body(ex.getMessage()); } } import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @GetMapping("/resource/{id}") public String getResource(@PathVariable Long id) { // Simulate a resource not found scenario throw new ResourceNotFoundException("Resource with id " + id + " not found"); } }
@Qualifier
: Эта аннотация используется для устранения неоднозначности между несколькими компонентами одного и того же типа. Если у вас есть более одного bean-компонента одного типа, но вы хотите автоматически связать только один из них, @Qualifier устраняет путаницу, созданную @Autowired, объявляя, какой именно bean-компонент должен быть автоматически подключен.
public interface PaymentGateway { void processPayment(double amount); } @Component("creditCardPayment") public class CreditCardPayment implements PaymentGateway { @Override public void processPayment(double amount) { System.out.println("Processing credit card payment of $" + amount); } } @Component("paypalPayment") public class PaypalPayment implements PaymentGateway { @Override public void processPayment(double amount) { System.out.println("Processing PayPal payment of $" + amount); } } import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service public class PaymentService { private final PaymentGateway paymentGateway; @Autowired public PaymentService(@Qualifier("paypalPayment") PaymentGateway paymentGateway) { this.paymentGateway = paymentGateway; } public void makePayment(double amount) { paymentGateway.processPayment(amount); } }
@Value
: Эта аннотация используется для внедрения значений из файлов свойств, переменных среды или других компонентов Spring в ваши bean-компоненты Spring. Это позволяет экспортировать конфигурацию и вводить значения в приложение во время выполнения без изменения кода.
Создайте файл свойств:
# application.properties app.name=My Spring Boot App app.version=1.0 app.debug=true import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class MyService { @Value("${app.name}") private String appName; @Value("${app.version}") private String appVersion; @Value("${app.debug}") private boolean debugMode; public void printAppInfo() { System.out.println("Application Name: " + appName); System.out.println("Application Version: " + appVersion); System.out.println("Debug Mode: " + debugMode); } }
@Profile
: Эта аннотация используется для определения профилей для различных сред или сценариев в приложении. Профили позволяют настраивать различные наборы компонентов, свойств или компонентов для разных сред выполнения, таких как разработка, тестирование или производство.
@PostConstruct
: Эта аннотация используется для указания метода, который должен быть выполнен после создания компонента и внедрения всех его зависимостей. Эта аннотация часто используется для задач инициализации, которые должны выполняться после полной настройки компонента.
@PreDestroy
: Эта аннотация используется для указания метода, который должен быть выполнен непосредственно перед тем, как bean-компонент Spring будет уничтожен или удален из контейнера Spring. Он часто используется для задач очистки или освобождения ресурсов, принадлежащих компоненту.
@Async
: аннотация Async используется для обозначения метода как асинхронного, позволяя ему выполняться в отдельном потоке, вне основного потока приложения. Это может быть особенно полезно для выполнения неблокирующих операций или распараллеливания задач.
@EnableAsync
: аннотация EnableAsync используется для включения поддержки асинхронной обработки. Он позволяет помечать определенные методы как асинхронные с помощью аннотации @Async
и выполнять их в отдельных потоках, обеспечивая улучшенный параллелизм и скорость реагирования. Вот пример того, как использовать.
В заключение отметим, что аннотации — это мощная функция Spring Boot, которая позволяет разработчикам настраивать и настраивать поведение различных компонентов в своих приложениях. Используя аннотации, разработчики могут создавать надежные и эффективные веб-приложения, которые легко поддерживать и масштабировать.
Если вам понравилось читать этот пост, вы получили от него помощь и знания и хотите поддержать мои усилия, пожалуйста, хлопайте в ладоши этой статье и подписывайтесь.