WebMvcConfigurer详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebMvcConfigurer详解相关的知识,希望对你有一定的参考价值。

参考技术A WebMvcConfigurer接口常用的方法:

addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
addPathPatterns:用于设置拦截器的过滤路径规则;addPathPatterns("/**")对所有请求都拦截
excludePathPatterns:用于设置不需要拦截的过滤规则
拦截器主要用途:进行用户登录状态的拦截,日志的拦截等。

以前写SpringMVC的时候,如果需要访问一个页面,必须要写Controller类,然后再写一个方法跳转到页面,感觉好麻烦,其实重写WebMvcConfigurer中的addViewControllers方法即可达到效果了

比如,我们想自定义静态资源映射目录的话,只需重写addResourceHandlers方法即可。

addResoureHandler:指的是对外暴露的访问路径
addResourceLocations:指的是内部文件放置的目录

这个方法是用来配置视图解析器的,该方法的参数ViewResolverRegistry 是一个注册器,用来注册你想自定义的视图解析器等。

configureMessageConverters:信息转换器

我可以在另一个模块中使用 WebMvcConfigurer 的实例吗?

【中文标题】我可以在另一个模块中使用 WebMvcConfigurer 的实例吗?【英文标题】:Can I use an instance of a WebMvcConfigurer in another module? 【发布时间】:2021-12-22 19:53:06 【问题描述】:

我编写了一个拦截器来为 SpringBoot Java Rest API 生成服务日志。我有下面的代码来定义自定义 WebMvcConfigurer:

package com.gem.common.interceptors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer 

    @Autowired
    LoggerInterceptor logInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) 
        registry.addInterceptor(logInterceptor);
    

我想在不同的模块中使用这个 InterceptorConfig。可以打包使用还是需要在每个模块中定义?

【问题讨论】:

你为什么不能这样做? Spring Boot 对其他各种拦截器也是如此。 【参考方案1】:

我想对于“其他模块”,您是在问是否可以将该代码也提供给其他 Spring Boot 应用程序?

如果是这种情况 - 那么:是的,您可以将其打包到 jar 中,并将其作为依赖项添加到所有其他模块。但是,我将在下面发布执行此操作的方法-只是警告您-如果只是针对那个简单的类,则该解决方案将不值得。

简而言之,您需要做的是创建自己的外部工件(这通常通过 maven 或 gradle 完成。您为共享代码创建一个新的 maven 项目。它需要依赖于一些基础库这样您就可以使用@Configuration 注释。按照该项目中的说明放置您的类,并创建一个文件src/main/resources/META-INF/spring.factories 文件。There you'll need to point to that class。

然后您构建该项目并将生成的 jar 上传到包存储库。完成后,您可以将其作为依赖项添加到您的项目中。在启动时,Spring boot 会找到 spring.factories 文件并自动包含在其初始化中提到的类。

还请注意,这只是一个高级解释,您需要更多详细信息。春天has good documentation on this use case,他们也有一个demo project to show this extension mechanism。

【讨论】:

以上是关于WebMvcConfigurer详解的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot WebMvcConfigurer详解

详解Springboot中自定义SpringMVC配置

spring设计好美:WebMvcConfigurer

拓展springmvc原理详解

我可以在另一个模块中使用 WebMvcConfigurer 的实例吗?

SpringBoot2.x之WebMvcConfigurer