Springboot веб-разработка принцип автоматической настройки Springmvc

Предисловие

Мы также знаем, что Springboot позволяет использовать SpringMVC без какой-либо настройки. Его можно легко использовать. Но если вы не понимаете принцип, это, вероятно, станет головной болью, если вы столкнетесь с некоторыми проблемами в процессе разработки. Независимо от того, глубоко ли вы это понимаете. или нет, давайте сначала поговорим об этом... Давайте сначала поговорим об этом
... Сначала загляните на официальный сайт... Моя версия - версия 2.3.2, и я обнаружил, что официальный сайт также сильно изменился ... Различные версии можно скачать самостоятельно.Хотя структура изменилась, содержание изменилось незначительно... Изменения отмечены: рассматриваются
далее в этом документе

Принцип автоматической настройки SpringMVC

Официальное описание сайта

Вставьте сюда описание изображения
Автоконфигурация добавляет следующие функции поверх настроек Spring по умолчанию.


  • Два bean-компонента ContentNegotiatingViewResolver и BeanNameViewResolver настраиваются в WebMvcAutoConfiguration.
  1. ViewResolver настраивается автоматически (преобразователь представления: объект представления (View) получается в соответствии с возвращаемым значением метода, а объект представления определяет способ рендеринга (перенаправление? перенаправление?))
  2. ContentNegotiatingViewResolver: объединяет все преобразователи представлений;
  3. Как настроить: Мы можем сами добавить преобразователь представлений в контейнер, автоматически объединить его;
  4. код
@SpringBootApplication
public class ComWebApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(ComWebApplication.class, args);
    }

    @Bean
    public ViewResolver myViewReolver(){
    
    
        return new MyViewResolver();
    }

    public static class MyViewResolver implements ViewResolver{
    
    

        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
    
    
            return null;
        }
    }

}
  • Поддержка обслуживания статических ресурсов, включая поддержку WebJars (см. ниже).Путь к папке со статическим ресурсом, веб-джары описаны в правилах сопоставления статических ресурсов.
  • Автоматически регистрируются компоненты Converter, GenericConverter, Formatter.Конвертер
    : конвертер;
    public String hello(пользователь-пользователь): преобразование типов использует
    форматтер Converter Formatter;2017.12.17===Date;
public void addFormatters(FormatterRegistry registry) {
    
    
            ApplicationConversionService.addBeans(registry, this.beanFactory);
        }

Конвертер форматтера мы добавили сами, нам нужно только поместить его в контейнер

  • HttpMessageConverter: SpringMVC используется для преобразования Http-запросов и ответов;

  • -HttpMessageConverters определяются из контейнера, получить все HttpMessageConverter,
    добавить HttpMessageConverter в контейнер самостоятельно, нужно только прописать в контейнере свои компоненты (@Bean, @Component)

  • Автоматическая регистрация MessageCodesResolver (см. ниже).Определение правил генерации кодов ошибок.

  • Поддержка статического index.html. Статическая домашняя страница описана в правилах сопоставления статических ресурсов.

  • Поддержка пользовательских значков (описана ниже в этом документе). favicon.icon описан в правилах статического сопоставления ресурсов.

  • Автоматическое использование bean-компонента ConfigurationWebBindingInitializer (см. ниже).Мы
    можем настроить ConfigurationWebBindingInitializer для замены значения по умолчанию (добавлено в контейнер)
    инициализировать WebDataBinder,
    запросить данные ===== JavaBean;

Вставьте сюда описание изображения

расширение SpringMVC

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

 <mvc:view‐controller path="/hello" view‐name="success"/>
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/hello"/>
            <bean></bean>
        </mvc:interceptor>
    </mvc:interceptors>

Нам всем необходимо настроить в соответствии с реальными потребностями

Вставьте сюда описание изображения
Если вы хотите сохранить эти настройки Spring Boot MVC и внести дополнительные настройки MVC (перехватчики, средства форматирования, контроллеры представлений и другие функции), вы можете добавить свой собственный класс @Configuration типа WebMvcConfigurer, но без @EnableWebMvc.

Если вы хотите сохранить эти настройки Spring Boot MVC и выполнить дополнительные настройки MVC (перехватчики, средства форматирования, контроллеры представлений и другие функции), вы можете добавить свой собственный класс @Configuration типа WebMvcConfigurer, но без добавления @EnableWebMvc.

@Configuration
public class MySpringMvcConfig implements WebMvcConfigurer {
    
    

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    
    
        //浏览器发送hello 跳转到success页面
        registry.addViewController("/hello").setViewName("success");

    }
}

Напишите класс конфигурации (@Configuration), который имеет тип WebMvcConfigurer; @EnableWebMvc не может быть отмечен; старая версия — WebMvcConfigurerAdapter, которая является абстрактным классом и не имеет пустых методов. Он сохраняет всю автоматическую настройку и также может использовать наши расширенные конфигурация
;

Давай выясним

принцип:

  • WebMvcAutoConfiguration — это класс автоматической настройки SpringMVC.
  • , будет импортирован при выполнении другой автоматической настройки; @Import({WebMvcAutoConfiguration.EnableWebMvcConfiguration.class})
@Configuration(
        proxyBeanMethods = false
    )
    @Import({
    
    WebMvcAutoConfiguration.EnableWebMvcConfiguration.class})
    @EnableConfigurationProperties({
    
    WebMvcProperties.class, ResourceProperties.class})
    @Order(0)
    public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer {
    
    

EnableWebMvcConfiguration类

  @Configuration(
        proxyBeanMethods = false
    )
    public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration implements ResourceLoaderAware {
    
    
        private final ResourceProperties resourceProperties;

Родительский класс EnableWebMvcConfiguration

public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
    
    
    private final WebMvcConfigurerComposite configurers = new WebMvcConfigurerComposite();

    public DelegatingWebMvcConfiguration() {
    
    
    }
 //从容器中获取所有的WebMvcConfigurer
    @Autowired(
        required = false
    )
    public void setConfigurers(List<WebMvcConfigurer> configurers) {
    
    
        if (!CollectionUtils.isEmpty(configurers)) {
    
    
            this.configurers.addWebMvcConfigurers(configurers);
        }

    }

//; Вызов всех конфигураций, связанных с WebMvcConfigurer, вместе;

public void addWebMvcConfigurers(List<WebMvcConfigurer> configurers) {
    
    
        if (!CollectionUtils.isEmpty(configurers)) {
    
    
            this.delegates.addAll(configurers);
        }

    }
  • , все WebMvcConfigurers в контейнере будут работать вместе.

  • , наш класс конфигурации также будет вызван;
    эффект: автоматическая конфигурация SpringMVC и наша расширенная конфигурация будут работать;
    обратите внимание, что то, что здесь сказано, будет работать для разных конфигураций, таких как настроенное статическое сопоставление файлов и некоторый viewController. Подождите, пока они будут работать вместе.

WebMvcРегистрации

Если вы хотите предоставить собственные экземпляры RequestMappingHandlerMapping, RequestMappingHandlerAdapter или ExceptionHandlerExceptionResolver и при этом сохранить настройки Spring Boot MVC, вы можете объявить компонент типа WebMvcRegistrations и использовать его для предоставления пользовательских экземпляров этих компонентов.

Полный контроль над SpringMVC

Если вы хотите получить полный контроль над Spring MVC, вы можете добавить свою собственную @Configuration с аннотацией @EnableWebMvc или, альтернативно, добавить свою собственную DelegatingWebMvcConfiguration с аннотацией @Configuration, как описано в Javadoc @EnableWebMvc. Вы можете добавить свою собственную аннотированную
@Configuration с @EnableWebMvc или следуйте инструкциям в Javadoc для @EnableWebMvc, чтобы добавить свой собственный @Configuration с аннотацией DelegatingWebMvcConfiguration.

принцип:

Почему не удается выполнить автоматическую настройку @EnableWebMvc?

  • @EnableWebMvc
@Import({
    
    DelegatingWebMvcConfiguration.class})
public @interface EnableWebMvc {
    
    
}
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
    
    

Похоже, это означает, что мы импортировали WebMvcConfigurationSupport.

  • Мы знаем, что WebMvcAutoConfiguration — это основной класс автоматической настройки Springmvc. Он работает только при отсутствии компонента WebMvcConfigurationSupport.
@ConditionalOnClass({
    
    Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({
    
    WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({
    
    DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
    
    

Итак, в настоящее время мы знаем, что класс WebMvcAutoConfiguration недействителен.

  • Импортированный WebMvcConfigurationSupport — это лишь самая базовая функция SpringMVC;

Как изменить конфигурацию SpringBoot по умолчанию

Режим:
1) Когда SpringBoot автоматически настраивает множество компонентов, он сначала проверяет, есть ли в контейнере настроенные пользователем (@Bean, @Component). Если есть, используйте настроенные пользователем. Если нет, он автоматически настроит их; если некоторые компоненты могут это сделать. Существует несколько (ViewResolvers), которые объединяют пользовательские конфигурации и конфигурации по умолчанию;
2) в SpringBoot будет много xxxConfigurers, которые помогут нам с расширенными конфигурациями
3), в SpringBoot будет много xxxCustomizers, которые помогут нам с индивидуальные конфигурации

おすすめ

転載: blog.csdn.net/wufagang/article/details/107588592