立足于核心技术的平台研发

了解spring MVC,还不懂spring boot吗

pbsg-fxnzanm3927909

有的Java WEB开发者见过Spring MVC,但没有真正研究过Spring boot,有的开发者一开始接触的就是Spring boot,对Spring MVC嗤之以鼻。Spring boot有很多优点,可以在web场景和非web场景下开发spring应用,而spring mvc是web MVC框架,但就web应用来讲,spring boot发展和完善了spring MVC的不足。

 

这两者最明显的区别之一是:应用部署和启动方式。spring mvc和传统的mvc框架一样,需要借助外部容器运行web应用;而spring boot除了支持传统方式外还支持把容器作为框架的一部分嵌入进来,然后以可执行jar的形式运行在Java虚拟机上。

 

需要注意的是,spring boot内嵌的容器并不是spring家族的产品,比如tomcat、jetty等servlet容器,比如netty web容器等,他只是借助了这些容器的可嵌入能力,把他们封装到spring framework框架内了,本质上是把嵌入式容器作为spring应用上下文的组件beans处理了。

 

在传统的spring应用中,外置容器需要启动脚本来引导,随容器的生命周期回调执行spring上下文的初始化。比如,spring web中的ContextLoaderListener和Web MVC中的DispatcherServlet,前者利用ServletContext生命周期中构建Web ROOT spring应用上下文,后者结合servlet生命周期创建DispatcherSevlet的spring应用上下文。这些方式都免不了被动回调执行,spring应用没有获得完整的应用主导权。在此种问题下,spring boot的嵌入式容器方案成功解决了这个不足,得以更自由地、独立地开发、部署和运维独立应用。spring boot是使用自动装配特性把嵌入式容器jar连同其他组件组装成spring bean定义(BeanDefinition),随spring应用上下文启动而注册并完成初始化的。驱动spring应用上下文启动的核心组件是spring boot的核心API SpringApplication,从这个意义上讲,spring boot应用其实是spring应用。

 

spring boot应用编译打包后的可执行jar包与war包有哪些区别?这个问题,可以通过了解其目录结构的不同得见端倪。

spring boot可执行Jar包解压缩后,可以发现顶级目录是BOOT-INF、META-INF和org。BOOT-INF下有两个目录:classes和lib,显然分别是项目类文件和依赖的第三方jar库。而META-INF则是包含了MANIFEST.MF清单文件和maven的pom配置信息,总之属于jar应用的元信息。第三个目录org其实是spring boot相关的class文件。

再看看spring boot打出的war包目录结构,同样顶级目录有三个:META-INF、WEB-INF、org。和可执行jar比,只有WEB-INF不同,其他是一样的,这个WEB-INF其实就是传统web应用的上下文根路径,其下是classes、lib和lib-provided,classes是项目应用类,lib是项目应用类依赖的第三方jar,lib-provided是为了解决war包 部署格式下可以兼容地运行在servlet容器环境或spring boot启动器(WarLauncher)环境下。也就是说,对于spring boot来说,jar或者war两种归档方式本质是无差别,如果不部署在传统Web环境下,一般使用jar归档方式。

 

对于开发者来说,多了解一些底层的东西可以更深刻地理解各种工具是如何实现的,看似很高大上的系统也离不开一砖一瓦的搭建。

 

下一篇讲一下spring boot是如何加装启动调起应用的,理解为什么说spring是Java EE规范的一个轮子。

上一篇
下一篇

相关文章

在线留言

*

*

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

电话:18660802028