初升级SpringBoot2.0
版本,在已经使用SpringBoot1.x
的系统内仍是存在一些兼容性的问题,有不少变化!!!也存在一些过期的方法、配置文件信息以及类,咱们在以前版本的SpringBoot1.x
中可使用WebMvcConfigurerAdapter
抽象类来处理SpringMVC
相关的配置,因为SpringBoot2.0
版本最低支持 JDK1.8
环境,在JDK1.8
引入了特殊的关键字default
,该关键字配置在interface
接口的方法时子类能够不去实现该方法,至关于抽象类内已经实现的接口方法。git
代替WebMvcConfigurerAdapter
抽象类扩展SpringMVC
相关配置。web
专题 | 专题名称 | 专题描述 |
---|---|---|
001 | Spring Boot 核心技术 | 讲解SpringBoot一些企业级层面的核心组件 |
002 | Spring Boot 核心技术章节源码 | Spring Boot 核心技术简书每一篇文章码云对应源码 |
003 | Spring Cloud 核心技术 | 对Spring Cloud核心技术全面讲解 |
004 | Spring Cloud 核心技术章节源码 | Spring Cloud 核心技术简书每一篇文章对应源码 |
005 | QueryDSL 核心技术 | 全面讲解QueryDSL核心技术以及基于SpringBoot整合SpringDataJPA |
006 | SpringDataJPA 核心技术 | 全面讲解SpringDataJPA核心技术 |
007 | SpringBoot核心技术学习目录 | SpringBoot系统的学习目录,敬请关注点赞!!! |
咱们本章仅仅使用了web
相关的依赖,pom.xml
配置文件以下所示:spring
//......
<dependencies>
<!--添加web依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
//......
复制代码
新版本咱们能够采用两种方式来配置WebMvcConfigurer
bash
JavaBean
方式配置WebMvcConfigurer
WebMvcConfigurer
实现类方式采用JavaBean
方式咱们只须要添加一个web
相关配置的类型,而且配置@Configuration
注解,将该配置类托管给Spring IOC
完成配置,代码配置以下所示:微信
/**
* web配置类
*
* @author:于起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/15
* Time:下午10:29
* 简书:http://www.jianshu.com/u/092df3f77bca
* ================================
*/
@Configuration
public class WebJavaBeanConfiguration {
/**
* 日志拦截器
*/
@Autowired
private LogInterceptor logInterceptor;
/**
* 实例化WebMvcConfigurer接口
*
* @return
*/
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
/**
* 添加拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor).addPathPatterns("/**");
}
};
}
}
复制代码
咱们经过@Bean
注解的返回值来完成WebMvcConfigurer
的配置实例化,在WebMvcConfigurer
接口实例内调用addInterceptors
方法完成添加拦截器配置,跟以前WebMvcConfigurerAdapter
方式感受没事区别,只不过是编码形式有一点变化。app
在上面配置内添加了一个LogInterceptor
拦截器,该拦截器目的很简单,仅仅是测试拦截器配置是否生效,代码也很简单,输出访问地址的URI
,实现代码以下所示:框架
@Component
public class LogInterceptor implements HandlerInterceptor {
/**
* logger instance
*/
static Logger logger = LoggerFactory.getLogger(LogInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
logger.info("请求路径:{}", request.getRequestURI());
return true;
}
}
复制代码
为了测试访问地址被拦截须要添加一个测试控制器请求地址,测试控制器代码以下所示:ide
/**
* 测试控制器
* @author:于起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/15
* Time:下午10:34
* 简书:http://www.jianshu.com/u/092df3f77bca
* ================================
*/
@RestController
public class TestController {
/**
* 测试拦截地址
* @return
*/
@RequestMapping(value = "/index")
public String index() {
return "Success";
}
}
复制代码
咱们来启动项目,访问地址http://127.0.0.1:8080/index,查看控制台输出内容,以下所示:spring-boot
2018-03-17 16:51:26.633 INFO 2152 --- [nio-8080-exec-1] c.h.c.interceptors.LogInterceptor : 请求路径:/index
复制代码
根据日志的输出咱们断定
JavaBean
配置WebMvcConfigurer
的方式是能够生效的,回想文章开头说到的关键字deault
,既然default
修饰的方法能够不被子类实现,那么咱们彻底能够实现WebMvcConfigurer
接口,来添加对应的配置,下面咱们来尝试添加一个新的配置类使用实现接口的方式来添加拦截器的配置。学习
咱们建立一个名为WebConfiguration
的配置类而且实现WebMvcConfigurer
接口,代码以下所示:
/**
* web相关配置类
* @author:于起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/17
* Time:下午4:45
* 简书:http://www.jianshu.com/u/092df3f77bca
* ================================
*/
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
/**
* 日志拦截器
*/
@Autowired
private LogInterceptor logInterceptor;
/**
* 重写添加拦截器方法并添加配置拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor).addPathPatterns("/**");
}
}
复制代码
第二种方式有点咱们以前使用的感受,只不过以前是使用的WebMvcConfigurerAdapter
抽象类,而如今咱们直接使用WebMvcConfigurer
接口。
正由于
SpringBoot2.0
是基于JDK1.8
及以上版本,因此能够彻底使用JDK1.8
新特性提供更好的实现方式。
咱们重启项目,再次访问地址http://127.0.0.1:8080/index在控制台查看,输出内容跟方式一
同样,也就代表了这种配置也是能够生效的。
本章介绍了SpringBoot2.0
版本的WebMvcConfigurer
两种的配置方式,能够根据本身的喜爱在项目中进行配置,不过第二种可能更吻合项目中的开发模式。
本章源码已经上传到码云: SpringBoot配套源码地址:gitee.com/hengboy/spr… SpringCloud配套源码地址:gitee.com/hengboy/spr… SpringBoot相关系列文章请访问:目录:SpringBoot学习目录 QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录 SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录,感谢阅读! 欢迎加入QQ技术交流群,共同进步。