Автор этой статьи: Цзинь Инкуй
источник:Технологический институт 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/