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.
:::информация Также опубликовано здесь.
:::
Оригинал