[Фэй Чао] Графический исходный код Springboot | Всесторонне перенять конфигурацию springmvc

Java задняя часть
[Фэй Чао] Графический исходный код Springboot | Всесторонне перенять конфигурацию springmvc

предисловие

Мы все знаем, что 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 постоянно обновляется, добро пожаловать в «погоню за драмой» вместе!