Spring Boot実戦第七章-Spring Boot Web開発-Web関連構成


この章では、springboot自動構成、servlet、filter、listenerの登録など、基本的なweb関連構成について説明します.構成は簡単です.
1.Spring Bootが提供する自動構成
(1).自動構成のViewResolver
ContentNegotiatingViewResolverは、MVCが提供する特別なViewResolverであり、自分でviewを処理するのではなく、異なるViewを処理するために異なるViewResolverにエージェントを提供し、最高の優先度を持っている.
BeanNameViewResolverは、コントローラ内のメソッドで返される文字列が、BeanNameViewResolverに従って、返される文字列というBeanの名前のViewを検索してビューをレンダリングします.例:
構成ファイルでのBeanName ViewResolverの構成
 //    
    @Bean
    public BeanNameViewResolver beanNameViewResolver(){
        BeanNameViewResolver beanNameViewResolver=new BeanNameViewResolver();
        return beanNameViewResolver;
    }

    @Bean
    public MappingJackson2JsonView jsonView() {
        MappingJackson2JsonView jsonView = new MappingJackson2JsonView();
        return jsonView;
    }

コントロールレイヤでBeanName文字列を返す
/**
     *   jsonView,   bean   jsonView      
     */
    @RequestMapping(value = "/json",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public String json(Model model){
       Person single=new Person("   ",28);
       model.addAttribute("single",single);
       return "jsonView";
    }

InternalResourceViewResolver、極めて一般的なViewResolver、接頭辞、接尾辞、コントローラのメソッドを構成してビュー名を返す文字列には、2つの構造方法があります.
public InternalResourceViewResolver() {
        Class> viewClass = this.requiredViewClass();
        if (InternalResourceView.class == viewClass && jstlPresent) {
            viewClass = JstlView.class;
        }

        this.setViewClass(viewClass);
    }

    public InternalResourceViewResolver(String prefix, String suffix) {
        this();
        this.setPrefix(prefix);
        this.setSuffix(suffix);
    }

(2).自動構成の静的リソース
自動構成クラスWebMvcAutoConfigurationでは、この方法では静的リソースのデフォルトのパス構成が自動的に構成されていることがわかります.
 public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
            } else {
                Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
                CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
                if (!registry.hasMappingForPattern("/webjars/**")) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

                String staticPathPattern = this.mvcProperties.getStaticPathPattern();
                if (!registry.hasMappingForPattern(staticPathPattern)) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

            }
        }

/static、/public、/resources、/META-INF/resourcesの静的ファイルを/**に直接マッピングし、直接http://localhost:8080/**静的リソースへのアクセス
Webjarマッピング/webjar/
(3).自動構成のFormatterとConverter
自動構成クラスの定義:
 public void addFormatters(FormatterRegistry registry) {
        Iterator var2 = this.delegates.iterator();

        while(var2.hasNext()) {
            WebMvcConfigurer delegate = (WebMvcConfigurer)var2.next();
            delegate.addFormatters(registry);
        }

    }

Converter、GenericConverter、Formatterインタフェースの実装クラスのBeanを定義すると、Spring MVCに自動的に登録されます.
(4).カスタム構成のHttpMessageConverter
/**
     *      HttpMessageConverters bean
     *    spring mvc   HttpMessageConverter     HttpMessageConverter
     */
    @Override
    public void configureMessageConverters(List> converters) {
        converters.addAll(httpMessageConverters.getConverters());
    }

2.Spring Bootのweb構成を引き継ぐ
追加の構成を追加し、自動構成を使用したくない場合は、MVCの構成方法を使用してWebMvcConfigurerAdapterを継承する構成クラスを定義できます.ここではSpring Boot 2バージョンの時にWebMvcConfigurerを実現することもできます.
3.サーブレット、FIlter、Listenerの登録
サーブレット、FIlter、Listenerを直接Beanと宣言したり、サーブレットRegistrationBean、FilterRegistrationBean、サーブレットListenerRegistrationBeanを登録したりして、簡単にbeanと直接宣言すればいいです.