предисловие
Мы все знаем, что SpringBoot выполняет множество автоматических настроек. но многие老司机
Я не люблю "сделай сам", но предпочитаю ощущение "управления одной рукой". Итак, в этой статье давайте поговорим о том, как взять на себя автоматическую настройку SpringMVC от SpringBoot.
Давайте сначала посмотрим на описание официальной документации springboot:
74.7 Switch off the Default MVC configuration
The easiest way to take complete control over MVC configuration is to provide your own
@Configuration
with the@EnableWebMvc
annotation. This will leave all MVC configuration in your hands.
Конечно, учитывая, что некоторые студенты плохо владеют английским языком, они не могут понять, что означает вышеизложенное, но спрашивать не смеют. Поэтому Фэй Чао использовал английский язык, который преподавал учитель физкультуры в начальной школе (я действительно не имею в виду чернокожего учителя физкультуры), и сделал простой перевод следующим образом:
Самый простой способ получить полный контроль над конфигурацией MVC — аннотировать свою собственную @Configuration с помощью @EnableWebMvc. Это оставит всю конфигурацию MVC в ваших руках.
Анализ исходного кода @EnableWebMvc
@EnableWebMvc
следующее:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(DelegatingWebMvcConfiguration.class)
public @interface EnableWebMvc {
}
Тогда это не имеет никакого отношения к полному поглощению Springmvc. давайте посмотрим на этоDelegatingWebMvcConfiguration
Диаграмма отношений понятна с первого взгляда.
давайте посмотрим еще разWebMvcAutoConfiguration
@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class,
WebMvcConfigurerAdapter.class })
// 肥朝标重点:@EnableWebMvc中Import了WebMvcConfigurationSupport的子类
// 因此该MissingBean条件不满足,WebMvcAutoConfiguration失效。
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class,
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {
// 忽略无关信息
}
Расширенное мышление
Смотри исходный код, не смотри ради чтения, главное, **深入思考
**. Это предложение Фей Чао будет подчеркивать в каждой статье, даже если вы думаете, что Фей Чао многословен, Фей Чао должен сказать это. Например, прочитав этот исходный код, мы все еще можем глубоко задуматься, какую информацию мы можем выжать?
Как правило, автоматическая настройка Springboot — это не более чем две процедуры.
-
spring.factories
Кстати, в файле spring.factories настройтеorg.springframework.boot.autoconfigure.EnableAutoConfiguration=xxx
. -
EnableXXX
путь, через@Import
Импортируйте определенный класс конфигурации и настройте его в классе конфигурации
Каковы характеристики этих двух подпрограмм и для каких сценариев они подходят?
Например, мы настроилиstarter
, если использоватьspring.factories
Этот метод автоматической настройки, затем однажды процитированныйstarter
Эта банка настраивается автоматически без каких-либо действий. Преимущество в том, что это удобно, и соответствующий jar вводится, и пользователю не нужно его воспринимать, и он автоматически настраивается, о чем все говорили, из коробки. вроде самый знакомыйspring-boot-starter-web
, когда вы цитируете банку, она будет выполнять за вас различные операции без восприятия (что это за различные операции, пожалуйста, продолжайте следить за серией анализа исходного кода Springboot), недостаток в том, что она недостаточно гибкая, я просто привожу банку , просто я сделал что-то с тобой из ниоткуда不可告人的约定配置
.
но ты используешьEnableXXX
этой конфигурации он проходит@Import
Как импортировать определенный класс конфигурации. Вы можете решить, нужно вам это или нет, набрав или нет, сделайте это不可告人的约定配置
. Преимущество в том, что это более контролируемо, а недостаток в том, что если таких методов слишком много, мне приходится делать много аннотаций, чтобы добиться этого.开箱即用
.
используемые сцены:
Из преимуществ и недостатков этих двух, а также из нашего чтения исходного кода Springboot мы можем сделать вывод, что, например, во встроенном веб-контейнере они относятся к готовому сценарию.必要性
требования, мы часто используемspring.factories
кстати, а для кеша и без него можно запустить非必要性
требования, мы используемEnableXXX
Способ.
Фэй Чао предложил:
После того, как мы разберемся в преимуществах и недостатках этих двух методов автоматической настройки, давайте взглянем на Springboot.@EnableWebMvc
дизайн. По сути идеальное сочетание плюсов и минусов обоих. Springboot впервые принимаетspring.factories
Таким образом, когда вы ссылаетесь на банку, это дает вам множество скрытых конфигураций соглашений. Но в этой автоматической конфигурации зарезервировано@ConditionalOnMissingBean(xxx.class)
Такое предзнаменование. Когда старый водитель хочет управлять одной рукой, ему нужна только простая@EnableWebMvc
, отмените эту автоматическую настройку и полностью возьмите ее на себя. Это не только обеспечивает готовое использование, но и большую управляемость.
Эти гениальные способы, которыми вы пишетеstarter
Вы можете обратиться к этой дизайнерской идее в любое время.
напиши в конце
«Кроме того, не разговаривайте с Фей Чао наедине, — спросил меня интервьюер.你从源码中学到了什么?
Что делать, если моя хризантема тугая. Серия анализов исходного кода Фей Чао**每篇
** явно выражены или подразумеваются"怎么看源码?"
и"看源码你学到了什么?"
, я давно говорил тебе поставить звездочку на официальном аккаунте top fatchao, но ты не слушаешь, и все равно чувствуешь, что там рутины, пора подтягиваться! Кроме того, серия анализов исходного кода Springboot постоянно обновляется, добро пожаловать в «погоню за драмой» вместе!