SpringBoot入门到精通系列
SpringBoot入门到精通-Spring的注解编程(一)SpringBoot入门到精通-SpringBoot入门(二)SpringBoot入门到精通-Spring的基本使用(三)SpringBoot入门到精通-SpringBoot集成SSM(四)
前言
经过上面的学习,我们已经掌握的Spring的注解式编程,有此基础后我们再学习SpringBoot就易如反掌,因为SpringBoot就是基于Spring的注解式编程进行开发。接下来我们就正式开始SpringBoot部分内容的学习,先来做个入门程序。
三.SpringBoot入门程序我们来玩一个入门案例,使用SpringBoot编写一个简单的WEB程序,使用浏览器访问后台能够返回一个“Hello Spring Boot”即可。那么我么思考一下,如果我么使用SpringMVC来做这个案例需要做哪些事情?
- 创建一个web工程(打包方式为 war)导入Spirng相关,SpringMVC相关,Jackson相关,日志相关等等一大堆jar包。web.xml中配置:前端控制器DispatcherServlet;编码过滤器;配置上下文参数(指定Spring的xml配置文件地址)等编写SpringMVC的xml配置文件,然后里面配置一堆东西编写Controller,编写方法
总之,使用SpringMVC编写这个web程序是非常麻烦的,那么我们看一下使用SpirngBoot来实现又什么区别
1.搭建HelloWorld你可以参照官方该文档去搭建 ,也可以按照我下面的步骤来搭建
1.1.创建工程注意,创建工程的时候选择骨架选择 quickstart(普通的jar项目即可),当然也可以不选择骨架,默认就是普通java项目。总之不要创建一个webapp项目(这是为什么呢??)
1.2.导入相关依赖jar org.springframework.boot spring-boot-starter-parent2.2.5.RELEASE org.springframework.boot spring-boot-starter-web
spring-boot-starter-parent是SpringBoot提供的工程 ,spring-boot-starter-web是SpringBoot整合SpringMVC的依赖。此刻你可能会有些疑问,后面我再解释,稍安勿躁。
1.3.创建配置类配置类也是启动类,贴上@SpringBootApplication最,提供一个main方法来启动应用
@SpringBootApplication public class ApplicationConfig { public static void main(String[] args) { //启动程序 SpringApplication.run(ApplicationConfig.class); } }1.4.编写Controller
@RestController public class HelloController { @RequestMapping("/hello") public String hello() { return "Hello Spring Boot"; } }
代码到这里编写完成,项目结构如下
1.5.启动Main方法测试控制台启动效果
端口默认是8080 , 使用浏览器访问 http://localhost:8080/hello,效果如下
在一开始我们就有知道,SpringBoot是用来简化Spring应用的搭建和开发,使用了SpringBoot之后确实简单了很多,集成速度也快了很多。但是在简单的背后意味着复杂的封装。
2.HelloWorld分析完成了上面案例相信你也看到了测试效果,此刻你或许有很多地方不理解,比如:pom.xml为什么只需要导入一个jar包,为什么web项目使用的是平通java项目的结构;为什么不在需要web.xml; 使用main方法就能启动程序等等。下面我们一一解答
2.1.pom.xml分析pom中有3个点是需要给大家讲一下的
- 打包方式:jar使用引入了一个 spring-boot-starter-parent 工程导入了一个 spring-boot-starter-web 依赖包
【重要】对于SpringBoot而言即使是开发WEB项目也是采用普通java项目的结构,打包方式默认使用个jar ,也不再需要WEB-INF/web.xml等结构。当然SpringBoot也可以使用 war的方式来打包项目,这个我们后面再说。
spring-boot-starter-parent org.springframework.boot spring-boot-dependencies2.2.5.RELEASE ../../spring-boot-dependencies pom Spring Boot Starter Parent Parent pom providing dependency and plugin management for applications built with Maven https://projects.spring.io/spring-boot/#/spring-boot-starter-parent UTF-8 1.8 @ ${java.version} UTF-8 ${java.version}
可以看到,spring-boot-starter-parent 继承了 spring-boot-dependencies ,它的打包方式是
真正管理依赖的是其实是 spring-boot-dependencies ,安装ctrl点击进去可以看到 ,该项目的
总之:【重要】我们要使用SpringBoot就需要通过
junit junit
无需导入版本号,因为父工程已经管理起来了,除非你要修改默认的版本。
在导入 spring-boot-starter-web 的时候我们也是么有指定版本号,可想而知该依赖是被spring-boot-starter-parent管理起来了的,那么该依赖的作用是什么呢?看名字能够猜到,它是SpringBoot和WEB环境整合的一个依赖。我们可以打开该依赖的结构查看一下
【重要】可以看到,一个spring-boot-starter-web导入了很多的其他依赖,如:Spring的基础依赖,SpringMVC的基础依赖,Jackson基础依赖,日志基础依赖,Tomcat的依赖,自动配置的依赖,所以这个spring-boot-starter-web把集成Web环境所需要的所有依赖都导入进来了。你似乎明白点什么了?
【重要】顺便解答一个问题:为什么不需要部署Tomcat? 因为 spring-boot-starter-web 已经导入了一个tomcat(SpringBoot内嵌Tomcat),当我们启动main方法时,底层就会启动内嵌的Tomcat,不在需要我们自己部署。
2.2.启动类分析下面我们来分析启动类,也就是配置类。在之前我们学习Spring的Java Config有说过,就是使用一个Java类来取代Spring的xml配置作为配置文件,SpringBoot就是使用Spring的Java Config配置。所以我们刚才的 ApplicationConfig 就是一个配置类,同时它提供了一个main方法来启动项目,所以也是启动类。有两个东西需要分析
- 注解:@SpringBootApplication启动:SpringApplication.run(ApplicationConfig.class)
@SpringBootApplication 是SpringBoot提供的一个复合注解,它由三个注解组成,源码如下
//配置注解,该注解上又贴了一个 @Configuration @SpringBootConfiguration //开启自动配置 @EnableAutoConfiguration //Spring IOC自动扫描 @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication { @AliasFor( annotation = EnableAutoConfiguration.class ) Class>[] exclude() default {}; @AliasFor( annotation = EnableAutoConfiguration.class ) String[] excludeName() default {}; @AliasFor( annotation = ComponentScan.class, attribute = "basePackages" ) String[] scanbasePackages() default {}; @AliasFor( annotation = ComponentScan.class, attribute = "basePackageClasses" ) Class>[] scanbasePackageClasses() default {}; @AliasFor( annotation = Configuration.class ) boolean proxyBeanMethods() default true; }
【重要】@SpringBootApplication 包含了三个注解
@SpringBootConfiguration :该注解的本质其实就是一个 @Configuration 配置注解,标记某个类成为配置类@EnableAutoConfiguration :开启SpringBoot自动配置的注解,比如我们集成SpringMVC并没有配置DispatcherServlet前端控制器,但是这个东西一定是存在的,就是SpringBoot帮我们自动配置好了。@ComponentScan :这个在讲Spring的Java Config就有介绍,它是Spring IOC的自动扫描的注解,默认扫描当前包及其子包中的打了 @Component;@Repository;@Service;@Controller 注解的类。也就是说我们的HelloController其实已经被启动类默认扫描到了。该注解中还提供了 exclude 可以让我们去排除某些类不需要被Spring注册。也可以通过 scanbasePackages 来修改扫描的包路径
【重要】也就是说标记了 @SpringBootApplication 注解的类,即是一个Spring的配置类,也拥有IOC自动扫描的能力,同时开启了SpringBoot的自动配置的能力。
对于main方法中的 SpringApplication.run 我们知道它的作用是用来启动程序的,该方法会初始化好SpringBoot的环境,并创建AnnotationConfigApplicationContext作为Spring的IOC容器类,然后会执行容器类的 refresh 方法进行刷新。加载Bean,注册Bean,实例化Bean,自动配置,内嵌的Tomcat启动都在该方法中。具体细节后面会专门说到,这里就做讨论了。
2.3.小扩展dependencyManagement 和 dependencies
我们在SpringBoot的父项目中有看到 dependencyManagement 元素,那么在该元素中的依赖和 放在 dependencies中的依赖有什么区别呢?放在dependencies中的依赖是可以直接使用的,放在 dependencyManagement 中的依赖只是起到了声明或管理的作用,其中的依赖还不能直接使用,需要在dependencies引入才能使用。
那dependencyManagement有什么意义?它的意义就是管理版本,通常在父项目中使用 dependencyManagement 管理依赖,在子项目中dependencies导入依赖,然后无需版本号引入,因为版本号交给父项目管理了。SpringBoot就是这样干的。
packaging为jar和war的区别
我们需要在pom中指定
jar : 打jar包,执行maven的 package命令 就可以把项目打成一个 xx.jar ,这种打包用在普通java项目,SpringBoot默认打jar包。war :打 war 包,执行maven的 package命令 就可以把项目打成一个 xx.war ,如果是传统的SpringMVC开发的项目就是一个war的项目。pom :这种打包方式代表该项目是用来管理依赖的项目,不需要写任何java代码,通常是一个父项目,被子工厂来继承,比如SpringBoot的父项目 spring-boot-starter-parent 就是打 pom 包。maven-plugin :这个比较少用,它是用来开发maven插件的。 3.项目结构认识
SpringBoot项目标准结构如下
代码存放于java 目录 , resources目录中包括
static : 静态资源目录,比如css,js,html都放在该目录,类似于以前的webapp目录。默认情况下,Spring Boot从classpath下 的 /static ( /public , /resources 或 /meta-INF/resources )文件夹, 或从 ServletContext 根目录提供静态内容templates :模板文件目录 ,比如xxx.jsp文件就放到该目录,类似于 WEB-INF 目录application.properties : 该文件是SpringBoot默认的配置文件名,如果要对项目做一些自定义的配置就修改该文件的内容即可,比如要修改端口,我们加入如下内容 server.port=8181 。还有一个默认配置是application.yml ,这个我们后面再说。 4.创建项目的三种方式
下面介绍SpringBoot项目的几种创建方式第一种是手动创建,刚才我们已经演示过了 ,第二种是使用Spring官方提供的快捷创建网站 https://start.spring.io/
通过网站可以直接配置项目属性,添加依赖,然后点击 generate 生成项目,网站会下载一个基础的SpringBoot项目。
第三种是通过IDEA的Spring Initializr 创建,如下
对项目做相关配置
选择需要的jar包
点击下一步,项目创建成功
根据上面Hello分析我们可以总结出SpringBoot的一些特点
SpringBoot基于Spring高度封装,使用简单高效,很容易就能继承三方框架,比如继承SpringMVC就需要导入一个spring-boot-starter-web即可。SpringBoot基于Spring的注解式配置,无需xml,简化了大量的配置SpringBoot的父项目帮我们管理了很多的基础依赖和不能,大大简化了mavenSpringBoot内嵌了Tomcat,使用main方法即可启动,部署简单SpringBoot自动配置功能让配置更加简单
一个字,爽 , 但是缺点就是封装的太深,你需要花费很大的精力去了解它的封装过程。
文章就到这里把,喜欢的话请一定给个好评哦,喜欢的话请一定给个好评哦,喜欢的话请一定给个好评哦。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)