Spring Boot — шпаргалка по аннотациям, часть. 1

Spring Boot — шпаргалка по аннотациям, часть. 1

6 января 2023 г.

В 2018 году я познакомился с темой микросервисов и Spring Boot в ходе формального обучения. Это было во время моей недолгой работы старшим архитектором в Маниле, Филиппины. Хотя я работал над «похожей архитектурой» еще в 2007–2008 годах, работая инженером-программистом в Symantec, идея Uber JAR показалась мне действительно захватывающей. Кроме того, поскольку теперь он будет применяться через самый популярный фреймворк, появляется больше возможностей. Это включает в себя создание «исполняемых приложений» для Windows намного проще!

В любом случае, тема нашего обсуждения — Spring Boot Annotations. Недавно, в августе 2022 года, обучая команду из 10 человек, я понял, что, хотя я знаю большую часть аннотаций Spring Boot, я могу не знать обо всех них. Итак, я решил написать эту статью. Я надеюсь, что это поможет читателям бросить беглый взгляд либо во время их повседневной работы, либо в качестве общего справочника. Поскольку я работаю над Spring Boot, Cloud, Spring Security, Spring Data последние 4 года, позже я напишу [Часть-02] этой статьи, в которой также будут рассмотрены другие аннотации. Он будет охватывать аннотации Spring Security, Spring Data и Spring Cloud.

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


Репозиторий GitHub

https://rebrand.ly/skp-sb-annot-git


[Весна]

@SpringBootApplication

Что ж, это может показаться удивительным. @SpringBootApplication на самом деле представляет собой комбинацию трех функций или аннотаций. Другими словами, он имеет эффект трех аннотаций вместе: @ComponentScan, @Configuration, @EnableAutoConfiguration n

Основной класс вашего приложения Spring Boot должен быть аннотирован этой аннотацией, которая имеет основной метод.

 package xyz.sumithpuri.spring.boot.annotation;  

 import org.springframework.boot.SpringApplication;  
 import org.springframework.boot.autoconfigure.SpringBootApplication;  
 import org.springframework.context.annotation.Bean;  

 import xyz.sumithpuri.spring.boot.annotation.service.SBASampleImpl;  
 import xyz.sumithpuri.spring.boot.annotation.service.SBASampleInterface;  


 @SpringBootApplication  
 public class SpringBootAnnotationApplication {  

      public static void main(String[] args) {  
           SpringApplication.run(SpringBootAnnotationApplication.class, args);  
      }  

      @Bean  
      public SBASampleInterface getSBAService() {  

           return new SBASampleImpl();  
      }  
 }  

@EnableAutoConfiguration

Итак, Spring позволяет автоматически настраивать приложение, создавая и регистрируя компоненты Spring в пути к классам. @EnableAutoConfiguration позволяет определить базовый пакет поиска. По умолчанию базовым пакетом для поиска бинов будет тот же пакет, что и у класса, объявляющего эту аннотацию.

Обычно вы размещаете эту аннотацию в своем основном классе. Если вы используете @SpringBootApplication, эта аннотация может вам не понадобиться.

 package xyz.sumithpuri.spring.boot.annotation;  

 import org.springframework.boot.SpringApplication;  
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
 import org.springframework.context.annotation.Bean;  
 import org.springframework.context.annotation.ComponentScan;  
 import org.springframework.context.annotation.Configuration;  

 import xyz.sumithpuri.spring.boot.annotation.service.SBASampleImpl;  
 import xyz.sumithpuri.spring.boot.annotation.service.SBASampleInterface;  


 //@SpringBootApplication  
 @EnableAutoConfiguration  
 @Configuration  
 @ComponentScan(basePackages = "xyz.sumithpuri.spring.boot.annotation")  
 public class SpringBootAnnotationApplication {  

      public static void main(String[] args) {  
           SpringApplication.run(SpringBootAnnotationApplication.class, args);  
      }  

      @Bean  
      public SBASampleInterface getSBAService() {  

           return new SBASampleImpl();  
      }  
 }  

@SpringBootTest

Это просто: @SpringBootTest используется для создания объекта контекста приложения, поддерживающего тестирование.

Вы должны добавить эту аннотацию к файлу тестового класса**.**

 package xyz.sumithpuri.spring.boot.annotation;  

 import org.junit.jupiter.api.Test;  
 import org.junit.runner.RunWith;  
 import org.springframework.boot.test.context.SpringBootTest;  
 import org.springframework.test.context.junit4.SpringRunner;  

 @RunWith(SpringRunner.class)  
 @SpringBootTest  
 class SpringBootAnnotationApplicationTests {  

      @Test  
      void contextLoads() {  
      }  
 }  

@SpringBootConfiguration

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


@ConditionalOnClass

Совпадает, только если указанные классы находятся в пути к классам.

 package xyz.sumithpuri.spring.boot.annotation.configuration;  

 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;  
 import org.springframework.context.annotation.Bean;  
 import org.springframework.context.annotation.Configuration;  

 import xyz.sumithpuri.spring.boot.annotation.service.SBASampleImpl;  
 import xyz.sumithpuri.spring.boot.annotation.service.SBASampleInterface;  

 /**  
  * @author sumith.puri  
  *  
  */  
 @Configuration  
 @ConditionalOnClass(SBASampleImpl.class)  
 public class SBASampleConfiguration {  

      @Bean  
      public SBASampleInterface getSBAService() {  

           return new SBASampleImpl();  
      }  
 }  

Если Spring DevTools включен, вы увидите журналы на консоли, которые представляют собой операторы отладки, показывающие совпадения или оценки условий.


@ConditionalOnProperty

Соответствует только в том случае, если указанное свойство среды присутствует и имеет определенное значение.

 package xyz.sumithpuri.spring.boot.annotation.configuration;  

 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;  
 import org.springframework.context.annotation.Bean;  
 import org.springframework.context.annotation.Configuration;  

 import xyz.sumithpuri.spring.boot.annotation.service.SBASampleImpl;  
 import xyz.sumithpuri.spring.boot.annotation.service.SBASampleInterface;  

 /**  
  * @author sumith.puri  
  *  
  */  
 @Configuration  
 //@ConditionalOnClass(SBASampleImpl.class)  
 @ConditionalOnProperty(name="mode", havingValue="false")  
 public class SBASampleConfiguration {  

      @Bean  
      public SBASampleInterface getSBAService() {  

           return new SBASampleImpl();  
      }  
 }  

Пожалуйста, добавьте свойство 'mode=false' в ваш application.properties. Если это свойство отсутствует или имеет другое значение, ваш сервер откажется запускаться, так как не будет свойства для ввода для автосвязанного компонента. (См. код в репозитории GitHub).

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

@ConfigurationProperties

@ConfigurationPropertiesScan

Он помечает класс как источник свойств конфигурации (сопоставляя его со свойствами или файлом yaml), который затем можно использовать для управления, а также для проверки свойств. ConfigurationPropertiesScan можно использовать для сканирования местоположений файлов свойств. Местоположение можно указать в качестве параметра аннотации.

 package xyz.sumithpuri.spring.boot.annotation.configuration;  

 import org.springframework.boot.context.properties.ConfigurationProperties;  
 import org.springframework.boot.context.properties.ConfigurationPropertiesScan;  
 import org.springframework.stereotype.Component;  

 /**  
  * @author sumith.puri  
  *  
  */  
 @Component  
 @ConfigurationProperties(prefix = "proptest")  
 @ConfigurationPropertiesScan  
 public class SBASampleConfigurationProperties {  

      private String name;  
      private String pass;  
      private String mail;  
      private String year;  
      private long uuid;  

      public String getName() {  
           return name;  
      }  

      public void setName(String name) {  
           this.name = name;  
      }  

     ..... // Getter and Setter Methods 


[Типичный файл свойств, читаемый ConfigurationProperties]


**[Отладка сообщений печати при вызове конечной точки контроллера]


Остерегайтесь следующей статьи из этой серии под названием «SKP’s SB #04: Spring Boot Annotation Reference-01/b». «Серия статей SKP SB» полностью основана на Spring Boot, а также на связанных темах, таких как Docker Desktop, таймеры Java, аннотации Spring и чистое завершение работы приложений Spring Boot.

:::информация Также опубликовано здесь.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE