содержание
-
предисловие
-
Весенняя загрузочная версия
- найти класс автоконфигурации
- Уведомление
@Conditionalxxx
аннотация
- Уведомление
EnableConfigurationProperties
аннотация
- Уведомление
@Import
аннотация
- Уведомление
@AutoConfigurexxx
аннотация
- Обратите внимание на внутренний статический класс конфигурации
-
Суммировать
-
платить:Учебные материалы по микросервисам
предисловие
В Интернете много статей, в которых говорится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
Аннотация, эта аннотация указывает на определенное состояние.
Несколько часто используемых аннотаций перечислены ниже:
-
@ConditionalOnBean
: Создавать экземпляр, когда в контейнере есть указанный bean-компонент. -
@ConditionalOnMissingBean
: Создавать экземпляр, когда в контейнере не указан bean-компонент. -
@ConditionalOnClass
: Создавать экземпляр, когда в пути к классам есть указанный класс. -
@ConditionalOnMissingClass
: Создавать экземпляр, когда в пути к классам не указан класс. -
@ConditionalOnWebApplication
: создается, когда проект является веб-проектом. -
@ConditionalOnNotWebApplication
: создается, когда проект не является веб-проектом. -
@ConditionalOnProperty
: создание экземпляра, когда указанное свойство имеет указанное значение. -
@ConditionalOnExpression
: условное суждение, основанное на выражениях SpEL. -
@ConditionalOnJava
: запуск экземпляра, когда версия JVM находится в указанном диапазоне версий. -
@ConditionalOnResource
: запуск создания экземпляра при наличии указанного ресурса в пути к классам. -
@ConditionalOnJndi
: создание экземпляра триггера при наличии JNDI. -
@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, основные популярные технологии:
Суммировать
Выше приведены шесть процедур интеграции в надежде помочь читателям избавиться от Baidu и интегрировать компоненты независимо друг от друга.