С Java 5.0 Java начал поддерживать аннотации. Как ведущие основы в java Ecosystem, весна также поддерживала аннотации с версии 2.5. По сравнению с использованием XML для настройки пружинной карки, использование аннотаций обеспечивает больше контроля над пружинной структурой.
Сейчас все больше и больше проектов используют аннотации для связанной конфигурации, но в Spring аннотаций очень много, я полагаю, что многие люди не очень хорошо разбираются в этих аннотациях, и многие никогда ими не пользовались. В этой статье мы попытаемся полностью представить часто используемые аннотации в Spring и сделать краткое введение.
1. Основные аннотации
@Required
Эта аннотация используется в методе установки компонента. Указывает, что это свойство является обязательным и должно быть введено на этапе настройки. В противном случае будет выброшено исключение BeanInitializationException.
@Autowired
Эта аннотация используется в полях компонента, методах установки и конструкторах для явного объявления зависимостей. Автопроводка по типу.
При использовании этой аннотации в поле и использовании атрибута для передачи значения Spring автоматически присваивает значение полю. Вы также можете использовать эту аннотацию для частных свойств (не рекомендуется) следующим образом.
Наиболее распространенное использование — использовать эту аннотацию в установщике, чтобы можно было добавить пользовательский код в метод установщика. следующее:
当在构造方法上使用此注解的时候,需要注意的一点就是一个类中只允许有一个构造方法使用此注解。此外,在Spring4.3后,如果一个类仅仅只有一个构造方法,那么即使不使用此注解,那么Spring也会自动注入相关的bean。 следующее:
@Qualifier
Эта аннотация используется с @Autowired. Использование этой аннотации дает вам больше контроля над процессом впрыска.
@Qualifier можно использовать для одного параметра конструктора или метода. Когда в контексте есть несколько бинов одного типа, использование @Autowired не может отличить бин для привязки.В этом случае вы можете использовать @Qualifier для указания имени.
@Configuration
Эта аннотация используется на классах, чтобы определить бобы. Его функция такая же, как файл конфигурации XML, указывающий, что этот компонент является конфигурацией пружины. Кроме того, этот класс может использовать аннотацию @Bean для инициализации бобов определения.
@ComponentScan
Эта аннотация обычно используется в сочетании с аннотацией @Configuration для указания пакета, который Spring сканирует на наличие аннотации. Если пакет не указан, пакет, в котором находится этот класс конфигурации, будет проверен по умолчанию.
@Lazy
Эта аннотация используется в классах компонентов Spring. По умолчанию зависимости Bean в Spring создаются и настраиваются с самого начала. Если вы хотите лениво инициализировать bean-компонент, вы можете использовать аннотацию Lazy для этого класса, чтобы указать, что bean-компонент будет создан и инициализирован только при первом использовании. Эту аннотацию также можно использовать в классах, аннотированных с помощью @Configuration, указывая, что все методы, аннотированные с помощью @Bean, будут инициализированы лениво.
@Value
Эта аннотация используется для полей, параметров конструктора и параметров метода. @Value может указывать выражение значения свойства. Он поддерживает использование SpringEL для получения значения через #{}, а также поддерживает использование ${} для ввода значения источника свойства (файл свойств, локальная переменная среды , системное свойство и т. д.) в свойствах компонента. Внедрение этой аннотации происходит в AutowiredAnnotationBeanPostProcessor.
2. Стереотипная аннотация
@Component
Эта аннотация используется в классе для объявления компонента Spring (Bean), добавляя его в контекст приложения.
@Controller
Эта аннотация используется для объявления того, что этот класс является контроллером Spring для класса, который является особой формой аннотации @Component.
@Service
Эта аннотация используется для класса, чтобы объявить, что этот класс является классом обслуживания, который выполняет бизнес-логику, вычисления, вызывает внутренние API и т. д. Это конкретная форма аннотации @Component.
@Repository
Этот класс используется для объявления этого класса в классе для доступа к базе данных, как правило, в качестве роли DAO.
Эта аннотация имеет характеристики автоматического перевода: например, когда этот компонент выдает исключение, будет обработчик для обработки исключения без использования блока try-catch.
3. Аннотации Spring Boot
@EnableAutoConfiguration
Эта аннотация обычно используется в основном классе приложения, чтобы указать Spring Boot автоматически добавлять bean-компоненты на основе текущего пакета, устанавливать свойства bean-компонентов и т. д.
@SpringBootApplication
Эта аннотация используется в основном классе приложения проекта Spring Boot (этот класс должен быть в базовом пакете). Классы, использующие эту аннотацию, сначала заставят компонент запуска Spring Boot сканировать классы в базовом пакете и его подпакетах.
Эта аннотация также добавляет следующие аннотации:
- @Configuration
- @EnableAutoConfiguration
- @ComponentScan
4. Spring Аннотации MVC и REST
@Controller
Эта аннотация была упомянута выше.
@RequestMapping
Эту аннотацию можно использовать в классах и методах для сопоставления веб-запросов с классом или методом обработчика. Когда эта аннотация используется в классе, создается базовый URL-адрес, и все @RequestMappings в его методах основаны на этом URL-адресе.
Вы можете использовать его атрибут метода, чтобы ограничить, какие http-методы соответствуют запросу.
Кроме того, после Spring 4.3 был представлен ряд вариантов @RequestMapping. следующее:
- @GetMapping
- @PostMapping
- @PutMapping
- @PatchMapping
- @DeleteMapping
Они соответствуют конфигурации RequestMapping соответствующего метода.
@CookieValue
Эта аннотация используется в параметрах метода, объявленного @RequestMapping, для привязки файла cookie с соответствующим именем в файле cookie HTTP.
Файл cookie — это значение файла cookie, имя которого — JSESSIONID в HTTP-запросе.
@CrossOrigin
Эта аннотация используется в классах и методах для поддержки междоменных запросов и была введена после Spring 4.2.
@ExceptionHandler
Эта аннотация используется на уровне метода для объявления логики обработки исключения. Можно указать целевое исключение.
@InitBinder
Эта аннотация используется в методе для объявления инициализации WebDataBinder (привязка параметров запроса к DataBinder на JavaBean). Используйте эту аннотацию на контроллере, чтобы настроить привязку параметров запроса.
@MatrixVariable
Эта аннотация используется для параметра метода обработчика запросов, и Spring может вставить соответствующее значение в URL-адрес матрицы. Переменная матрицы здесь может появиться в любом месте URL-адреса, а переменные разделены знаком ;. следующее:
Следует отметить, что Spring mvc по умолчанию не поддерживает матричные переменные и должен быть включен.
Конфигурация аннотации должна быть включена следующим образом:
@PathVariable
Эта аннотация используется по параметрам метода обработчика запроса. @Requestmapping может определить динамические пути, такие как:
Это можно связать с параметрами метода запроса, используя @PathVariable.
@RequestAttribute
Эта аннотация используется в параметрах метода обработчика запросов для привязки атрибутов в веб-запросе (атрибуты запроса, которые являются значениями атрибутов, размещенными сервером) с параметрами метода.
@RequestBody
Эта аннотация используется в параметре метода обработчика запросов для привязки карты тела http-запроса к этому параметру. HttpMessageConverter отвечает за преобразование объектов в HTTP-запросы.
@RequestHeader
Эта аннотация используется в параметре метода обработчика запросов для привязки значения заголовка HTTP-запроса к параметру.
@RequestParam
Эта аннотация используется в параметре метода обработчика запросов для привязки значения параметра HTTP-запроса к параметру.
@RequestPart
Эта аннотация используется в параметрах метода обработчика запросов для привязки составных частей, таких как файлы, к параметрам.
@ResponseBody
Этот метод обработчика аннотаций, используемый в запросе. И аналогичный эффект @RequestBody, метод для прямого вывода, чтобы вернуть HTTP-ответ объекта.
@ResponseStatus
Эта аннотация используется в методах и классах исключений для объявления кода состояния http, возвращаемого этим методом или классом исключений. Вы можете использовать эту аннотацию в контроллере, чтобы все @RequestMappings наследовались.
@ControllerAdvice
Эта аннотация используется в классах. Как упоминалось ранее, ExceptionMethod может быть объявлен для каждого контроллера. Здесь вы можете использовать @ControllerAdvice, чтобы объявить класс для единообразной обработки @ExceptionHandler, @InitBinder и @ModelAttribute для всех методов @RequestMapping.
@RestController
Эта аннотация используется в классе для объявления того, что контроллер возвращает не представление, а объект домена. Он также вводит две аннотации @Controller и @ResponseBody.
@RestControllerAdvice
Эта аннотация используется в классе, и вводятся две аннотации @ControllerAdvice и @ResponseBody.
@SessionAttribute
Эта аннотация используется в параметрах метода для привязки свойств в сеансе к параметрам.
@SessionAttributes
Эта аннотация используется на уровне типа для хранения объектов Javabean в сеанс. Обычно используется с аннотацией @Modelattribute. следующее:
5. Примечания к доступу к данным
@Transactional
Эта аннотация используется в определениях интерфейса, методах в интерфейсах, определениях классов или общедоступных методах в классах. Следует отметить, что эта аннотация не активирует транзакционное поведение, это просто метаданные, которые будут использоваться некоторой инфраструктурой времени выполнения.
6. Аннотации выполнения задач и планирования
@Scheduled
Эта аннотация используется для метода, чтобы объявить, что метод запланирован для планирования. Тип возвращаемого значения метода, использующего эту аннотацию, должен быть Void и не может принимать никаких параметров.
Второй отличается от первого тем, что не ждет завершения выполнения последней задачи.
@Async
Эта аннотация используется для метода, чтобы объявить, что метод будет выполняться в отдельном потоке. В отличие от запланированной аннотации, эта аннотация может принимать параметры.
Тип возвращаемого значения метода, использующего эту аннотацию, может быть Void или возвращаемым значением. Но тип возвращаемого значения должен быть Future.
VII. Заметки об испытаниях
@ContextConfiguration
Эта аннотация используется в классе для объявления файла конфигурации, используемого тестом. Кроме того, вы также можете указать класс для загрузки контекста.
Эту аннотацию обычно необходимо использовать с SpringJUnit4ClassRunner.