Заметки программиста — общие аннотации Springboot

Spring Boot
Автор этой статьи: Цзинь Инкуй
источник:Технологический институт CreditEase

В весенней загрузке отказались от многих громоздких конфигураций в предыдущих весенних проектах и ​​следуемсоглашение о конфигурацииПринцип , благодаря собственной конфигурации по умолчанию, значительно снижает сложность построения проекта. Также в spring boot использование большого количества аннотаций делает код более лаконичным и повышает эффективность разработки. Эти аннотации включают не только собственные аннотации Spring Boot, но и некоторые из них, унаследованные от Spring.

В этой статье классифицируются и обобщаются некоторые основные аннотации, обычно используемые в проектах Spring Boot, а их функции объясняются с точки зрения фактического использования.

Аннотации конфигурации проекта

1. Аннотация @SpringBootApplication

Глядя на исходный код, вы можете обнаружить, что @SpringBootApplication — это составная аннотация, включающая три аннотации: @SpringBootConfiguration, @EnableAutoConfiguration и @ComponentScan.

Функции этих трех аннотаций:

  • @SpringBootConfiguration: аннотируйте, что текущий класс является классом конфигурации, эта аннотация наследуется от @Configuration. И он будет включать один или несколько экземпляров метода, объявленного в текущем классе, помеченного аннотацией @Bean, в контейнер srping, а имя экземпляра — это имя метода.

  • @EnableAutoConfiguration: это аннотация для автоматической настройки. Эта аннотация завершит некоторые конфигурации по умолчанию в соответствии с добавленным jar-компонентом. Когда мы делаем микросервисы, мы добавим зависимость pom от jar-компонента spring-boot-starter-web, так что конфигурация по умолчанию настроит springmvc и tomcat.

  • @ComponentScan: сканирование классов, отмеченных аннотациями @Component, @Controller, @Service, @Repository в текущем пакете и его подпакетах, и включение их в контейнер Spring для управления. Эквивалент элементов конфигурации в файле конфигурации xml .

В большинстве случаев эти три аннотации будут использоваться одновременно.На основе передового опыта эти три аннотации упаковываются и становятся аннотациями @SpringBootApplication.

2. @ServletComponentScan: сервлет, фильтр, прослушиватель могут быть автоматически зарегистрированы непосредственно через аннотации @WebServlet, @WebFilter, @WebListener, так что функции сервлета, перехватчика и прослушивателя могут быть аннотированы без другой настройки, поэтому фильтр используется в эта фаза Реализация использует эту аннотацию.

3. @MapperScan: spring-boot поддерживает аннотацию компонента mybatis.Указав путь класса интерфейса mybatis через эту аннотацию, сканирование интерфейса mybatis может быть завершено.

У него та же функция, что и у аннотации @mapper, разница в том, что запись сканирования отличается. @mapper необходимо добавить в каждый класс интерфейса картографа. Поэтому в большинстве случаев после планирования каталога проекта внедрение интерфейса картографа завершается через путь конфигурации аннотации @MapperScan.

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

Глядя дальше на пакет mybatis-spring-boot-starter, вы можете обнаружить, что mybatis был упакован здесь.

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


4. Аннотации импорта ресурсов: @ImportResource @Import @PropertySource Эти три аннотации используются для импорта некоторых пользовательских файлов конфигурации.

@ImportResource(locations={}) Импортируйте другие файлы конфигурации xml, которые должны быть стандартными для основного класса конфигурации.

Импорт файла конфигурации свойства @PropertySource указывает путь к файлу, что эквивалентно использованию тега Spring для завершения введения элементов конфигурации.

Аннотация @import — это способ импортировать общие классы в контейнер Spring для управления.

слой контроллера

1. @Controller указывает, что этот класс является классом контроллера и используется вместе с @RequestMapping для перехвата запросов.Если метод запроса не указан в методе, по умолчанию перехватываются запросы на получение и отправку. Таким образом, после завершения запрос будет перенаправлен на преобразователь представления. Но когда создается большинство микросервисов, передняя и задняя части будут разделены. Поэтому бэкенд запроса фокусируется только на обработке данных, и если бэкенд возвращает данные в формате json, его необходимо дополнить аннотацией @ResponseBody.

Такой интерфейс, который должен только возвращать данные, требует завершения аннотаций 3. В большинстве случаев нам нужно возвращать данные. Он также основан на лучших практиках, поэтому эти три аннотации дополнительно интегрированы.

@RestController представляет собой комбинацию @Controller и @ResponseBody, класс аннотируется с помощью @RestController, а @ResponseBody больше не нужно добавлять в интерфейс данных. Более лаконично.

В той же ситуации @RequestMapping(value="", method= RequestMethod.GET ) нам всем нужно указать метод запроса. Этот способ написания будет более громоздким, поэтому есть несколько аннотаций следующего содержания.

общий стиль Стиль отдыха

@RequestMapping(value="", метод = RequestMethod.GET)

@GetMapping(значение="")

@RequestMapping(value="", метод = RequestMethod.POST)

@PostMapping(значение="")

@RequestMapping(value="", метод = RequestMethod.PUT)

@PutMapping(значение="")

@RequestMapping(value="", метод = RequestMethod.DELETE)

@DeleteMapping(значение="")

Эти аннотации являются лучшими практиками для @RequestMapping(value="",method= RequestMethod.xxx ). Чтобы сделать код более лаконичным.

2. @CrossOrigin:@CrossOrigin(origins="", maxAge=1000) Эта аннотация в основном предназначена для решения проблемы междоменного доступа. Эта аннотация может включить перекрестное происхождение для всей конфигурации контроллера или ее можно включить на уровне метода.

Мы используем эту аннотацию в проекте для решения междоменной проблемы, связанной с тем, что Microservice будет обращаться к разным узлам паука при планировании запланированных задач.

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

4. @EnablCaching@EnableCaching: эта аннотация представляет собой управляемую аннотациями функцию управления кешем в среде Spring. Эта аннотация была добавлена ​​с весенней версии 3.1. Его роль эквивалентна тегу диспетчера кеша в файле конфигурации Spring.

5. @PathVariable: аннотация переменной пути, {} используется в @RequestMapping для определения имени переменной части URL, например:

Также может поддерживаться метод добавления регулярных выражений к именам переменных, имя переменной: [регулярное выражение].

аннотации сервисного уровня

1. @Service: эта аннотация используется для обозначения компонентов бизнес-уровня, мы добавим эту аннотацию к классам, обрабатываемым бизнес-логикой, и передадим их в контейнер Spring. На этом уровне также настраиваются аспекты транзакций. Когда пусть эта аннотация не требуется. Существует аннотация, которая относится к общему компоненту.Когда мы не можем определить конкретную роль, мы можем использовать аннотацию, которая относится к общему компоненту, чтобы доверить контейнеру Spring.

2. @Resource: @Resource и @Autowired могут использоваться для сборки bean-компонентов, и их можно помечать в полях или методах. Аннотация @resource не предоставляется Spring, но относится к спецификации J2EE.

Разница между двумя предыдущими заключается в том, что метод сопоставления немного отличается: @Resource сопоставляет компоненты по имени по умолчанию, а @Autowired по умолчанию сопоставляет компоненты по типу.

Аннотации слоя сохраняемости

1. @Repository: класс аннотаций @Repository используется в качестве объекта DAO для управления объектами, управляющими базой данных.

В общем, @Component, @Service, @Controller, @Repository — это аннотации Spring, которые могут быть просканированы фреймворком Spring и введены в контейнер Spring для управления после аннотаций.

@Component — это общая аннотация, а остальные три аннотации являются расширениями этой аннотации и имеют определенные функции.

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

Таким образом, при нормальной разработке, если вы можете использовать один из @Service, @Controller, @Repository для обозначения расположения этого класса, не используйте для этого @Component.

2. @Transactional: с помощью этой аннотации можно объявлять транзакции, которые можно добавлять к классам или методам.

В весенней загрузке нет необходимости отдельно настраивать управление транзакциями, обычно мы добавляем аннотации транзакций на сервисный уровень для запуска транзакций. Следует отметить, что транзакции можно открывать только на публичных методах. И условие отката основного аспекта сделки. Обычно, когда мы настраиваем откат для исключения, если исключение перехватывается в методе, конфигурация аспекта транзакции становится недействительной.

Другие связанные заметки

  • @ControllerAdvice и @RestControllerAdvice: обычно используются с @ExceptionHandler, @InitBinder, @ModelAttribute.

  • @ControllerAdvice и @ExceptionHandler взаимодействуют для выполнения унифицированной обработки перехвата исключений.

  • @RestControllerAdvice — это коллекция @ControllerAdvice и @ResponseBody, которая может возвращать данные исключения в формате json.

Унифицированная обработка аварийного возврата данных выглядит следующим образом.

Вот краткое изложение некоторых обычно используемых аннотаций и инструкций по применению. Есть и другие более глубокие знания, которые необходимо усвоить при последующем использовании.

Справочная документация

  • https://docs.spring.io/spring-boot/docs/2.1.x/reference/html/

  • https://spring.io/projects/spring-boot/