Spring Boot объединяет несколько подпрограмм и требует меньше обходных путей~

Микросервисы

содержание

  • предисловие

  • Весенняя загрузочная версия

  1. найти класс автоконфигурации
  1. Уведомление@Conditionalxxxаннотация
  1. УведомлениеEnableConfigurationPropertiesаннотация
  1. Уведомление@Importаннотация
  1. Уведомление@AutoConfigurexxxаннотация
  1. Обратите внимание на внутренний статический класс конфигурации
  • Суммировать

  • платить:Учебные материалы по микросервисам

предисловие

В Интернете много статей, в которых говоритсяSpring Boot 如何整合 xxx, Есть ли статья, чтобы научить вас, почему это так интегрировано? Он интегрировал десятки миллионов фреймворков. На самом деле существует всего несколько подпрограмм. Почему вам нужно изучать тысячи из них? Почему бы вам не прийти сюда, чтобы изучить несколько подпрограмм и легко их интегрировать? Не так ли? вкусный? ? ?

Цель написания этой статьи сегодня — научить вас нескольким идеологическим процедурам, не говоря уже о том, что нужно интегрировать, зайти на Baidu и попробовать интегрировать самостоятельно.

Весенняя загрузочная версия

Версия Spring Boot, на которой основана эта статья:2.3.4.RELEASE.

1. Найдите класс автоконфигурации

Весенний ботинок добавит зависимость сначала при интеграции любого компонентаstarterТакие как интеграция мибатиmybatis-spring-boot-starter, зависимости следующие:

<dependency>         <groupId>org.mybatis.spring.boot</groupId>         <artifactId>mybatis-spring-boot-starter</artifactId>        <version>2.0.0</version></dependency>

КаждыйstarterПо сути, это будет класс автоматической настройки, и метод именования аналогичен. Формат:xxxAutoConfiguration, например, класс автоматической настройки MybatisMybatisAutoConfiguration,RedisКласс автоконфигурацииRedisAutoConfiguration,WEBКласс автоконфигурации для модуляWebMvcAutoConfiguration.

2. Обратите внимание на аннотацию @Conditionalxxx

@ConditionalxxxАннотированные в классе конфигурации или комбинированные@Beanотмечено на методе

В первую очередь нужно обратить внимание на класс автоматической настройки на@ConditionalxxxПримечание. Это условие для вступления в силу условий автоматического конфигурации.

НапримерWebMvcAutoConfigurationКласс помечен следующей аннотацией:

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

Приведенная выше строка кода означает, что текущего контейнера IOC нет.WebMvcConfigurationSupportКласс автоматической конфигурации вступит в силу только тогда, когда экземпляр этого класса помечен в классе конфигурации.@EnableWebMvcприведет к автоматической настройке классаWebMvcAutoConfigurationПричина отказа.

Во-вторых, необходимо обратить внимание на метод@ConditionalxxxАннотация, Spring Boot объединит в классе автоконфигурации@Beanа также@ConditionalxxxАннотации предоставляют конфигурации по умолчанию для запуска некоторых компонентов, но используют@Conditionalxxx(действительно при определенных условиях) аннотировано条件性, что удобно для разработчиков, чтобы переопределить эти конфигурации.

Например, класс автоматической настройки в MybatisMybatisAutoConfigurationСуществует следующий метод:

  @Bean  @ConditionalOnMissingBean  public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {}

Приведенному выше методу не нужно просматривать содержимое тела метода, а только аннотации к методу.@BeanЭта аннотация означает введениеBeanприбытьIOC容器середина,@ConditionalOnMissingBeanДанная аннотация является условным суждением, указывающим, что приSqlSessionFactoryобъект типа вIOC容器Если его в нем нет, он будет внедрен.

Ой? понимать это,Подразумевается, что если разработчику необходимо настроитьSqlSessionFactory, вы можете создать свой собственныйSqlSessionFactoryвведите объект и внедрите его в контейнер IOC, чтобы переопределить класс автоконфигурации. Например, когда Mybatis настраивает несколько источников данных, вам необходимо настроитьSqlSessionFactoryвместо использования класса автоконфигурации.

Короче говоря, обязательно обратите внимание на класс или метод автоматической настройки@ConditionalxxxАннотация, эта аннотация указывает на определенное состояние.

Несколько часто используемых аннотаций перечислены ниже:

  1. @ConditionalOnBean: Создавать экземпляр, когда в контейнере есть указанный bean-компонент.

  2. @ConditionalOnMissingBean: Создавать экземпляр, когда в контейнере не указан bean-компонент.

  3. @ConditionalOnClass: Создавать экземпляр, когда в пути к классам есть указанный класс.

  4. @ConditionalOnMissingClass: Создавать экземпляр, когда в пути к классам не указан класс.

  5. @ConditionalOnWebApplication: создается, когда проект является веб-проектом.

  6. @ConditionalOnNotWebApplication: создается, когда проект не является веб-проектом.

  7. @ConditionalOnProperty: создание экземпляра, когда указанное свойство имеет указанное значение.

  8. @ConditionalOnExpression: условное суждение, основанное на выражениях SpEL.

  9. @ConditionalOnJava: запуск экземпляра, когда версия JVM находится в указанном диапазоне версий.

  10. @ConditionalOnResource: запуск создания экземпляра при наличии указанного ресурса в пути к классам.

  11. @ConditionalOnJndi: создание экземпляра триггера при наличии JNDI.

  12. @ConditionalOnSingleCandidate: создание экземпляра триггера, когда указанный bean-компонент имеет только один в контейнере или их несколько, но указан предпочтительный bean-компонент.

3. Обратите внимание на аннотацию EnableConfigurationProperties.

EnableConfigurationPropertiesЭта аннотация часто аннотируется в классе конфигурации, чтобы@ConfigurationPropertiesОтмеченный файл конфигурации вступает в силу, так что глобальный файл конфигурации (application.xxx) для настройки свойств указанного префикса.

Класс автоконфигурации в RedisRedisAutoConfigurationСледующая строка кода отмечена выше:

@EnableConfigurationProperties(RedisProperties.class)

Эта строка кода интересна, мы можем взглянутьRedisPropertiesИсходный код выглядит следующим образом:

@ConfigurationProperties(prefix = "spring.redis")public class RedisProperties { private int database = 0; private String url; private String host = "localhost"; private String password;  .....

@ConfigurationPropertiesЭта аннотация указывает, что файл глобальной конфигурации начинается сspring.redis.xxxПрефиксные конфигурации сопоставляются сRedisPropertiesВ указанных свойствах фактическиRedisPropertiesНекоторые необходимые свойства Redis определены в этом классе, напримерhost,IP地址,密码и т.п.

@EnableConfigurationPropertiesАннотация предназначена для того, чтобы указанная конфигурация вступила в силу, и может сопоставлять свойства, настроенные в глобальном файле конфигурации, со свойствами связанных классов.

Зачем обращать внимание@EnableConfigurationPropertiesЧто с этой аннотацией?

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

4. Обратите внимание на аннотацию @Import

Эта аннотация немного высокомерна.Spring 3.xВ нем уже есть аннотация, что примерно означает быстро импортировать bean-компонент или класс конфигурации в IOC-контейнер. Эта аннотация имеет много замечательных применений, и я напишу отдельную статью, чтобы представить ее позже.

@ImportЭта аннотация обычно отмечается над классом автоконфигурации и обычно импортирует один или несколько классов конфигурации.

НапримерRabbitMQкласс автоконфигурации дляRabbitAutoConfigurationЕсть следующая строка кода:

@Import(RabbitAnnotationDrivenConfiguration.class)

Эта строка кода добавляетRabbitAnnotationDrivenConfigurationЭтот класс конфигурации позволяет Spring Boot загружаться вместе при загрузке в класс автоконфигурации.

Например, класс автоматической настройки RedisRedisAutoConfigurationЕсть следующая строка кода:

@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })

это@Importтакже представилLettuceа такжеJedisСуществует два класса конфигурации, поэтому, если вашему Redis необходимо использовать Jedis в качестве пула соединений, если вы хотите знать, какие Jedis нужно настроить, вам следует посмотреть на этот раз.JedisConnectionConfigurationэтот класс конфигурации.

Суммировать:@ImportОтмечено выше класса автоматической настройки, как правило, один или несколько классов конфигурации быстро импортируются, поэтому, если класс автоматической настройки что-то не настраивает, обязательно проверьте его.@ImportКласс конфигурации, импортированный этой аннотацией.

5. Обратите внимание на аннотацию @AutoConfigurexxx

@AutoConfigurexxxЭтот тип обреченности определяет порядок загрузки автоматически настраиваемых классов, таких какAutoConfigureAfter(после указания класса автоконфигурации),AutoConfigureBefore(до указания класса автоконфигурации),AutoConfigureOrder(Указывает приоритет классов автоконфигурации).

Зачем обращать внимание на порядок? Поскольку некоторые компоненты часто взаимозависимы, напримерMybatisа такжеDataSource, вы должны сначала успешно настроить вещи, связанные с источником данных, прежде чем вы сможете настроитьMybatisБар.@AutoConfigurexxxЭтот тип аннотации решает проблему взаимозависимости между компонентами.

НапримерMybatisAutoConfigurationСледующая строка кода отмечена выше:

@AutoConfigureAfter(DataSourceAutoConfiguration.class)

Смысл этой строки кода очень прост, этоMybatisAutoConfigurationЭто автоматически настраивается вDataSourceAutoConfigurationЗагрузился после этого, потому что я нужен тебе, какая простая причина.

Ладно, теперь понял, не задавай глупых вопросов впредь:Почему настроен Mybatis, при запуске сообщает об ошибке? Давайте сначала посмотрим, успешно ли настроен источник данных.

6. Обратите внимание на внутренние классы статической конфигурации

Некоторые классы автоматической настройки проще и менее рутинны, напримерRedisAutoConfigurationЭтот класс автоматической конфигурации определяет два метода для внедрения bean-компонентов, а остальные отсутствуют.

Но некоторые классы автоматической настройки не так просты и могут быть вложены посередине.nстатический класс конфигурации, такой какWebMvcAutoConfiguration, класс также вложенWebMvcAutoConfigurationAdapter,EnableWebMvcConfiguration,ResourceChainCustomizerConfigurationЭти три класса конфигурации. если ты просто посмотришьWebMvcAutoConfigurationЭтот класс автоматической настройки, кажется, ничего не конфигурирует, но внутри у него много всего.

Суммировать: Не забудьте автоматически настроить внутренний вложенный класс конфигурации класса, что действительно здорово.

Учебные материалы по микросервисам, усовершенствования Java, основные популярные технологии:

Disk.Baidu.com/Yes/1Xiaoao JH-O…

Суммировать

Выше приведены шесть процедур интеграции в надежде помочь читателям избавиться от Baidu и интегрировать компоненты независимо друг от друга.