网站开发实训步骤,昌平企业网站建设,网站的开发语言,网页动态设计怎么做转载自 Spring Boot 2.X 来临#xff0c;本文将带你起飞
当前互联网技术盛行#xff0c;以Spring 框架为主导的Java 互联网技术成了主流#xff0c;而基于Spring 技术衍生出来的Spring Boot#xff0c;采用了“约定优于配置”的思想#xff0c;极大地简化了Spring 框架…转载自 Spring Boot 2.X 来临本文将带你起飞
当前互联网技术盛行以Spring 框架为主导的Java 互联网技术成了主流而基于Spring 技术衍生出来的Spring Boot采用了“约定优于配置”的思想极大地简化了Spring 框架的开发。
随着近些年来微服务技术的流行Spring Boot 也成了时下炙手可热的热点技术。2017 年9 月Spring 框架出现了重大版本升级从4.x 版本升级为了5.x 版本随着这次升级Spring Boot的版本也在2018年3月从1.x升级到了2.x。
Spring Boot的优点
谈到Spring Boot就让我们先来了解它的优点。依据官方的文档Spring Boot的优点如下 创建独立的Spring应用程序 嵌入的Tomcat、Jetty或者Undertow无须部署WAR文件 允许通过Maven来根据需要获取starter 尽可能地自动配置Spring 提供生产就绪型功能如指标、健康检查和外部配置 绝对没有代码生成对XML没有要求配置。
这段描述告诉我们首先Spring Boot是一个基于Spring框架搭建起来的应用其次它会嵌入Tomcat、Jetty或者Undertow等服务器并且不需要传统的WAR文件进行部署也就是说搭建Spring Boot项目并不需要单独下载Tomcat等传统的服务器。
同时提供通过Maven或者Grandle依赖的starter这些starter可以直接获取开发所需的相关包通过这些starter项目就能以Java Application的形式运行Spring Boot的项目而无须其他服务器配置。
对于配置Spring Boot提供Spring框架的最大自动化配置大量使用自动配置使得开发者对Spring的配置尽量减少。
此外还提供了一些监测、自动检测的功能和外部配置与此同时没有附加代码和XML的配置要求。
约定优于配置这是Spring Boot的主导思想。对于Spring Boot而言大部分情况下存在默认配置你甚至可以在没有任何定义的情况下使用Spring框架如果需要自定义也只需要在配置文件配置一些属性便可以十分便捷。
而对于部署这些项目必需的功能Spring Boot提供starter的依赖例如spring-boot-starter-web捆绑了Spring MVC所依赖的包spring-boot-starter-tomcat绑定了内嵌的Tomcat这样使得开发者能够尽可能快地搭建开发环境快速进行开发和部署这就是Spring Boot的特色。也许作为传统开发者的你还未能理解其意义但这并不要紧。
为了展示Spring Boot的特色下节将分别展示传统Spring MVC项目和简易的Spring Boot入门实例并进行比较。 传统Spring MVC和Spring Boot的对比
在传统的Spring MVC项目开发中开发一个简易的Spring MVC项目需要配置DispatcherServlet也需要配置Spring IoC的容器。你可以选择使用web.xml的配置来实现当然如果你使用的是Servlet 3.1规范也可以继承由Spring MVC提供的AbstractAnnotationConfigDispatcherServletInitializer来配置Spring MVC项目。
这里先给出可以运行的代码示例即使你还不熟悉Spring MVC也没有关系这里只是为了说明开发比较烦琐而已后面将详谈Spring MVC的开发原理。
假设你已经导入需要的Spring和Spring MVC相关的依赖包到工程中那么就可以开始配置DispatcherServlet了。例如代码清单1-1就是通过继承AbstractAnnotationConfigDispatcherServletInitializer的方式来配置Spring MVC的DispatcherServlet的。
代码清单1-1 配置Spring MVC
package com.springboot.springmvc.conf;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { // Spring IoC容器配置 Override protected Class?[] getRootConfigClasses() { // 可以返回Spring的Java配置文件数组 return new Class?[] {}; } // DispatcherServlet的URI映射关系配置 Override protected Class?[] getServletConfigClasses() { // 可以返回Spring的Java配置文件数组 return new Class?[] { WebConfig.class }; } // DispatcherServlet拦截请求匹配 Override protected String[] getServletMappings() { return new String[] { *.do }; }
}
注意代码中加粗的地方。这里引入了一个Java配置文件—— WebConfig.java它的主要作用是配置Spring MVC的核心类DispatcherServlet的上下文如代码清单1-2所示。 代码清单1-2 配置DispatcherServlet的上下文
package com.springboot.springmvc.conf;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;Configuration
// 定义Spring MVC扫描的包
ComponentScan(valuecom.*,
includeFilters {Filter(type FilterType.ANNOTATION,value Controller.class)})
// 启动Spring MVC配置
EnableWebMvc
public class WebConfig {/**** 通过注解Bean初始化视图解析器* * return ViewResolver视图解析器*/Bean(name internalResourceViewResolver)public ViewResolver initViewResolver() {InternalResourceViewResolver viewResolver new InternalResourceViewResolver();viewResolver.setPrefix(/WEB-INF/jsp/);viewResolver.setSuffix(.jsp);return viewResolver;}/*** 初始化RequestMappingHandlerAdapter并加载HTTP的JSON转换器* * return RequestMappingHandlerAdapter 对象*/Bean(name requestMappingHandlerAdapter)public HandlerAdapter initRequestMappingHandlerAdapter() {// 创建RequestMappingHandlerAdapter适配器RequestMappingHandlerAdapter rmhd new RequestMappingHandlerAdapter();// HTTP JSON转换器MappingJackson2HttpMessageConverter jsonConverter new MappingJackson2HttpMessageConverter();// MappingJackson2HttpMessageConverter接收JSON类型消息的转换mediaType MediaType.APPLICATION_JSON_UTF8;ListMediaType mediaTypes new ArrayListMediaType();mediaTypes.add(mediaType);// 加入转换器的支持类型jsonConverter.setSupportedMediaTypes(mediaTypes);// 给适配器加入JSON转换器rmhd.getMessageConverters().add(jsonConverter);return rmhd;}
}
通过上面的代码配置完成Spring MVC的开发环境后才可以开发Spring MVC控制器Controller这样就可以开发一个简单的控制器Controller如代码清单1-3所示。
代码清单1-3 开发Spring MVC控制器
package com.springboot.springmvc.controller;import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;Controller
public class TestController {RequestMapping(/test)ResponseBodypublic MapString, String test() {MapString, String map new HashMapString, String();map.put(key, value);return map;}
}
这样就完成了一个传统Spring MVC的开发但是你还需要第三方服务器如Tomcat、WebLogic等服务器去部署你的工程。在启动服务器后再打开浏览器输入对应的URL如项目名称为SpringMVC则输入http://localhost:8080/SpringMVC/test.do就可以得到图1-1所示的页面。 图1-1 测试传统的Spring MVC项目
从上面来看传统的Spring MVC开发需要配置的内容还是比较多的而且对设计人员要求较高。开发完成后开发者还需要找到对应的服务器去运行如Tomcat或者Jetty等这样既要进行开发又要进行配置和部署工作量还是不少的。
而使用Spring Boot开发后你就会发现原来一切可以那么简单。不过在入门阶段暂时不需要讨论太多的细节问题这是未来需要讨论的问题所以这里只展示它是如何简单而已。首先我们在IDE中创建一个Maven工程并把其名称定义为Chapter1这样就可以看到一个Maven配置文件pom.xml将其内容修改为如代码清单1-4所示。
代码清单1-4 配置Spring Boot依赖环境
project xmlnshttp://maven.apache.org/POM/4.0.0
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdspringboot/groupIdartifactIdchapter1/artifactIdpackagingwar/packagingversion0.0.1-SNAPSHOT/versionnamechapter1 Maven Webapp/nameurlhttp://maven.apache.org/urlparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.0.0.RELEASE/version/parentpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingjava.version1.8/java.version/propertiesdependencies!-- Spring Boot Starter依赖引入 --!-- AOP包 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency!-- Web开发包将载入Spring MVC所需要的包且内嵌tomcat --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--加载测试依赖包 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies!-- 引入插件 --buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build
/project
从加粗的代码中可以看到Maven的配置文件引入了多个Spring Boot的starterSpring Boot会根据Maven配置的starter去寻找对应的依赖将对应的jar包加载到工程中而且它还会把绑定的服务器也加载到工程中这些都不需要你再进行处理。
正如Spring Boot承诺的那样绑定服务器并且实现Spring的尽可能的配置采用约定优于配置的原则。这里我们只需要开发一个类就可以运行Spring Boot的应用了为此新建类——Chapter1Main如代码清单1-5所示。
代码清单1-5 开发Spring Boot应用
package com.springboot.chapter1;import java.util.HashMap;
import java.util.Map;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;Controller
// 启用Spring Boot自动装配
EnableAutoConfiguration
public class Chapter1Main {RequestMapping(/test)ResponseBodypublic MapString, String test() {MapString, String map new HashMapString, String();map.put(key, value);return map;}public static void main(String[] args) throws Exception {SpringApplication.run(Chapter1Main.class, args);}
}
好了这个入门实例已经完结了。如果你没有接触过Spring Boot那么你会十分惊讶这样就配置完成Spring MVC的内容了吗我可以回答你“是的已经完成了现在完全可以使用Java Application的形式去运行类Chapter1Main。”下面是Spring Boot的运行日志
1 . ____ _ __ _ _ 2 /\\ / ____ __ _ _(_)_ __ __ _ \ \ \ \ 3( ( )\___ | _ | _| | _ \/ _ | \ \ \ \ 4 \\/ ___)| |_)| | | | | || (_| | ) ) ) ) 5 |____| .__|_| |_|_| |_\__, | / / / / 6 |_||___//_/_/_/ 7 :: Spring Boot :: (v2.0.0.RELEASE) 8 92018-03-01 22:21:55.843 INFO 16324 --- [ main] 10com.springboot.chapter1.Chapter1Main : 11Starting Chapter1Main on AFOIF-703271542 with PID 16324 12(G:\springboot\v2\chapter1\target\classes started by Administrator in 13G:\springboot\v2\chapter1) 14...... 152018-03-01 22:21:57.270 INFO 16324 --- [ main] 16s.w.s.m.m.a.RequestMappingHandlerMapping : 17Mapped {[/test]} onto public java.util.Mapjava.lang.String, java.lang.String 18com.springboot.chapter1.Chapter1Main.test() 19...... 202018-03-01 22:21:57.270 INFO 16324 --- [ main] 21com.springboot.chapter1.Chapter1Main : Started Chapter1Main in 1.845 seconds (JVM running for 2.143) 22
从日志中可以看到Tomcat已经启动并且将我们开发的Chapter1Main作为Spring MVC的控制器加载进来了也将对应的路径/test映射到开发的test方法上。因此接下来就可以进行测试了。打开浏览器在地址栏输入http://localhost:8080/test可以看到如图1-2所示的结果。 图1-2Spring Boot运行结果
与传统的Spring MVC是不是很不一样呢从上面的对比可以看出Spring Boot 允许直接进行开发这就是它的优势。在传统所需要配置的地方Spring Boot都进行了约定也就是你可以直接以Spring Boot约定的方式进行开发和运行你的项目。
当你需要修改配置的时候它也提供了一些快速配置的约定犹如它所承诺的那样尽可能地配置好Spring项目和绑定对应的服务器使得开发人员的配置更少更加直接地开发项目。
对于那些微服务而言更喜欢的就是这样能够快速搭建环境的项目而Spring Boot提供了这种可能性同时Spring Boot还提供了监控的功能。
随着云技术的到来微服务成了市场的热点于是代表Java微服务时代的Spring Boot微服务开发的时代已经到来结合Spring Cloud后它还能很方便地构建分布式系统开发满足大部分无能力单独开发分布式架构的企业所需所以这无疑是激动人心的技术。