36 наиболее часто используемых аннотаций Spring, какие из них вы еще не знаете?

Java

предисловие

С обновлением и итерацией технологии Java 5.0 стала поддерживать аннотации. Как ведущая среда в Java, Spring постепенно отказывается от конфигурации xml с тех пор, как версия 2.5 была обновлена, и все больше используются аннотации для управления средой Spring.

А в весне так много аннотаций, которые можно использовать много лет в java. Вот краткое изложение 7 наиболее часто используемых аннотаций по типам.

1. Основные аннотации

@Require

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

@Autowired

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

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

@Component

public class User {

    @Autowired                             

    private Address address;                 

}

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

@Component

public class User {

    private Address address;

    @AutoWired

  public setAddress(Address address) {

      // custom code

      this.address=address;

  }

}

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

@Component

public class User {

    private Address address;

    public User(Address address) {     

        this.address=address;

    }

}
<bean id="user" class="xx.User"/>

@Qualifier

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

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

@Component

public class User {

    @Autowired

    @Qualifier("address1")

    private Address address;

    ...

}

@Configuration

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

@Configuartion

public 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.

2. 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 4.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" />

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

@Configuration

public 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){

}

@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 {}

3. Аннотации Spring Boot

@EnableAutoConfiguration

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

@SpringBootApplication

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

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

@Configuration

@EnableAutoConfiguration

@ComponentScan

4. Стереотипная аннотация

Component

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

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

@Service

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

@Repository

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

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

5. Примечания к доступу к данным

@Transactional

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

6. Аннотации выполнения задач и планирования

@Scheduled

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

@Scheduled(fixedDelay=1000)

public void schedule() {

}

@Scheduled(fixedRate=1000)

public void schedulg() {

}

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

@Async

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

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

7. Тестовые аннотации

@ContextConfiguration

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

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

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes = SpringCoreConfig.class)

public class UserServiceTest {

}

Весенняя серия учебных заметок и вопросов для интервью, включая весенние вопросы для интервью, весенние вопросы для собеседования в облаке, весенние заметки для интервью, весенние заметки для учебника, весенние заметки для учебника по загрузке и руководство по собеседованию по Java 2020. Всего было организовано 1184 страницы PDF-документов.

Обратите внимание на общедоступный номер: программисты следуют за ветром, отвечайте на информацию, чтобы получить информацию о ведре семейства Spring в этом 1184-страничном PDF-документе.