Наиболее распространенные и важные аннотации 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, которая позволяет разработчикам настраивать и настраивать поведение различных компонентов в своих приложениях. Используя аннотации, разработчики могут создавать надежные и эффективные веб-приложения, которые легко поддерживать и масштабировать.

Если вам понравилось читать этот пост, вы получили от него помощь и знания и хотите поддержать мои усилия, пожалуйста, хлопайте в ладоши этой статье и подписывайтесь.