7 наиболее часто используемых аннотаций в Spring — самые сильные в истории!

Spring

Личный профиль: Раскованный, любовь к жизни.Культиватор Java (идентификатор общедоступной учетной записи WeChat: Культиватор Java), добро пожаловать, чтобы следовать. Вы можете получить последние учебные пособия по Java, которые я скомпилировал. Друзья, которым нравится базовый исходный код, могут прийти и обсудить

основная аннотация

@Required

Эта аннотация используется в методе установки компонента. Указывает, что это свойство является обязательным и должно быть внедрено на этапе настройки, в противном случае будет выброшен BeanInitializationExcepion.

@Autowired

Эта аннотация используется в полях компонента, методах установки и конструкторах для явного объявления зависимостей. Автопроводка по типу.

При использовании этой аннотации в поле и использовании атрибута для передачи значения Spring автоматически присваивает значение полю. Вы также можете использовать эту аннотацию для частных свойств (не рекомендуется) следующим образом.

@Componentpublic class User {    @Autowired    private Address address;}

Наиболее распространенное использование — использовать эту аннотацию в установщике, чтобы можно было добавить пользовательский код в метод установщика. следующим образом:

@Componentpublic class User {   private Address address;       @AutoWired   public setAddress(Address address) {      // custom code      this.address=address;   }}

При использовании этой аннотации в конструкторе следует отметить, что только один конструктор в классе может использовать эту аннотацию.

Кроме того, после Spring 4.3, если класс имеет только один конструктор, даже если эта аннотация не используется, Spring будет автоматически внедрять связанные компоненты. следующим образом:

@Componentpublic class User {    private Address address;        public User(Address address) {       this.address=address;     }}<bean id="user" class="xx.User"/>

@Qualifier

Эта аннотация используется с @Autowired. Использование этой аннотации дает вам больше контроля над процессом впрыска.

@Qualifier можно использовать для одного параметра конструктора или метода. Когда в контексте есть несколько бинов одного типа, использование @Autowired не может отличить бин для привязки.В этом случае вы можете использовать @Qualifier для указания имени.

@Componentpublic class User {    @Autowired    @Qualifier("address1")    private Address address;    ...}



@Configuration

Эта аннотация используется в классах для определения bean-компонентов. Его функция такая же, как у файла конфигурации xml, что указывает на то, что этот компонент является конфигурацией Spring. Кроме того, этот класс может использовать аннотацию @Bean для инициализации компонентов определения.

@Configuartionpublic class SpringCoreConfig {    @Bean    public AdminUser adminUser() {        AdminUser adminUser = new AdminUser();        return adminUser;    }}@ComponentScan

Эта аннотация обычно используется в сочетании с аннотацией @Configuration для указания пакета, который Spring сканирует на наличие аннотации. Если пакет не указан, пакет, в котором находится этот класс конфигурации, будет проверен по умолчанию.

@Lazy

Эта аннотация используется в классах компонентов Spring. По умолчанию зависимости Bean в Spring создаются и настраиваются с самого начала. Если вы хотите лениво инициализировать bean-компонент, вы можете использовать аннотацию Lazy для этого класса, чтобы указать, что bean-компонент будет создан и инициализирован только при первом использовании.

Эту аннотацию также можно использовать в классах, аннотированных с помощью @Configuration, указывая, что все методы, аннотированные с помощью @Bean, будут инициализированы лениво.

@Value

Эта аннотация используется для полей, параметров конструктора и параметров метода. @Value может указывать выражение значения свойства. Он поддерживает использование SpringEL для получения значения через #{}, а также поддерживает использование ${} для ввода значения источника свойства (файл свойств, локальная переменная среды , системное свойство и т. д.) в bean-компонент в свойствах.

Внедрение этого значения аннотации происходит в классе AutowiredAnnotationBeanPostProcessor.

Spring аннотации MVC и REST

@Controller

Эта аннотация используется для объявления того, что этот класс является контроллером Spring для класса, который является особой формой аннотации @Component.

@RequestMapping

Эту аннотацию можно использовать в классах и методах для сопоставления веб-запросов с классом или методом обработчика.

Когда эта аннотация используется в классе, создается базовый URL-адрес, и все @RequestMappings в его методах основаны на этом URL-адресе.

Вы можете использовать его атрибут метода, чтобы ограничить, какие http-методы соответствуют запросу.

@Controller@RequestMapping("/users")public class UserController {    @RequestMapping(method = RequestMethod.GET)    public String getUserList() {        return "users";    }}



这篇也推荐大家看下:Spring MVC常用注解。此外,Spring4.3之后引入了一系列@RequestMapping的变种。如下:

@GetMapping

@PostMapping

@PutMapping

@PatchMapping

@DeleteMapping

Они соответствуют конфигурации RequestMapping соответствующего метода.

@CookieValue

Эта аннотация используется в параметрах метода, объявленного @RequestMapping, для привязки файла cookie с соответствующим именем в файле cookie HTTP.

@ReuestMapping("/cookieValue")      public void getCookieValue(@CookieValue("JSESSIONID") String cookie){}

Файл cookie — это значение файла cookie, имя которого — JSESSIONID в HTTP-запросе.

@CrossOrigin

Эта аннотация используется в классах и методах для поддержки междоменных запросов и была введена после Spring 4.2.

@CrossOrigin(maxAge = 3600)@RestController@RequestMapping("/users")public class AccountController {    @CrossOrigin(origins = "http://xx.com")    @RequestMapping("/login")    public Result userLogin() {        // ...    }}

@ExceptionHandler

Эта аннотация используется на уровне метода для объявления логики обработки исключения. Можно указать целевое исключение.

@InitBinder

Эта аннотация используется в методе для объявления инициализации WebDataBinder (привязка параметров запроса к DataBinder на JavaBean). Используйте эту аннотацию на контроллере, чтобы настроить привязку параметров запроса.

@MatrixVariable

Эта аннотация используется для параметра метода обработчика запросов, и Spring может вставить соответствующее значение в URL-адрес матрицы. Переменная матрицы здесь может появиться в любом месте URL-адреса, а переменные разделены знаком ;. следующим образом:

// GET /pets/42;q=11;r=22@RequestMapping(value = "/pets/{petId}")public void findPet(@PathVariable String petId, @MatrixVariable int q) {    // petId == 42    // q == 11}

Следует отметить, что Spring mvc по умолчанию не поддерживает матричные переменные и должен быть включен.

<mvc:annotation-driven enable-matrix-variables="true" />

Конфигурация аннотации должна быть включена следующим образом:

@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter {     @Override    public void configurePathMatch(PathMatchConfigurer configurer) {        UrlPathHelper urlPathHelper = new UrlPathHelper();        urlPathHelper.setRemoveSemicolonContent(false);        configurer.setUrlPathHelper(urlPathHelper);    }}

@PathVariable
Эта аннотация используется в параметрах метода обработчика запросов. @RequestMapping может определять динамические пути, например:

@RequestMapping("/users/{uid}")

Параметры в пути могут быть привязаны к параметрам метода запроса с помощью @PathVariable.

@RequestMapping("/users/{uid}")public String execute(@PathVariable("uid") String uid){}

Обратите внимание на общедоступную учетную запись WeChat: сообщество Java, ответ в фоновом режиме: весна, вы можете получить N последних собранных мной серий Spring, все из которых являются галантерейными товарами.

@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. следующим образом:

@ModelAttribute("user")public PUser getUser() {}// controller和上面的代码在同一controller中@Controller@SeesionAttributes(value = "user", types = {    User.class})public class UserController {}

Аннотации Spring Boot

@EnableAutoConfiguration

Эта аннотация обычно используется в основном классе приложения, чтобы указать Spring Boot автоматически добавлять bean-компоненты на основе текущего пакета, устанавливать свойства bean-компонентов и т. д.

@SpringBootApplication

Эта аннотация используется в основном классе приложения проекта Spring Boot (этот класс должен быть в базовом пакете).

Классы, использующие эту аннотацию, сначала заставят Spring Boot начать сканирование базового пакета и классов в его подпакете.

Эта аннотация также добавляет следующие аннотации:

@Configuration

@EnableAutoConfiguration

@ComponentScan

Аннотация стереотипа

@Component

Эта аннотация используется в классе для объявления компонента Spring (Bean), добавляя его в контекст приложения.

@Controller

упомянутый ранее

@Service

Эта аннотация используется для класса, чтобы объявить, что этот класс является классом обслуживания, который выполняет бизнес-логику, вычисления, вызывает внутренние API и т. д. Это конкретная форма аннотации @Component.

@Repository

Этот класс используется для объявления этого класса в классе для доступа к базе данных, как правило, в качестве роли DAO.

Эта аннотация имеет характеристики автоматического перевода: например, когда этот компонент выдает исключение, будет обработчик для обработки исключения без использования блока try-catch.

Аннотации доступа к данным

@Transactional

Эта аннотация используется в определениях интерфейса, методах в интерфейсах, определениях классов или общедоступных методах в классах. Следует отметить, что эта аннотация не активирует транзакционное поведение, это просто метаданные, которые будут использоваться некоторой инфраструктурой времени выполнения.

Выполнение задачи, планирование аннотаций

@Scheduled

Эта аннотация используется для метода, чтобы объявить, что метод запланирован для планирования. Тип возвращаемого значения метода, использующего эту аннотацию, должен быть Void и не может принимать никаких параметров.

@Scheduled(fixedDelay=1000)public void schedule() {}@Scheduled(fixedRate=1000)public void schedulg() {}

Второй отличается от первого тем, что не ждет завершения выполнения последней задачи.

@Async

Эта аннотация используется для метода, чтобы объявить, что метод будет выполняться в отдельном потоке. В отличие от запланированной аннотации, эта аннотация может принимать параметры.

Тип возвращаемого значения метода, использующего эту аннотацию, может быть Void или возвращаемым значением. Но тип возвращаемого значения должен быть Future.

тестовая аннотация

@ContextConfiguration

Эта аннотация используется в классе для объявления файла конфигурации, используемого тестом. Кроме того, вы также можете указать класс для загрузки контекста.

Эту аннотацию обычно необходимо использовать с SpringJUnit4ClassRunner.

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = SpringCoreConfig.class)public class UserServiceTest {}