springboot

第一节

Spring技术的3个大的发展历史阶段

  1. spring1.x版本阶段

所有的依赖关系,都是使用xml进行描述——不管是IOC还是AOP的关系都是这样处理,都是历史背景决定的。

  1. spring2.x版本阶段

伴随着JDK1.5而来,它支持注解,使得xml配置文件的体积大大减小了,配置文件的数量也大大减少了。争论了很久 ,最终统一了使用方式:一些系统的配置使用xml完成,一些业务逻辑配置使用注解。

  1. spring3.x-spring4.x版本阶段

彻底的摆脱xml配置,完全使用注解+java类的形式。目前项目中还没有完全使用该种方式,以后纯使用该方式的机会也不大,因为springboot技术出来了,它就是建立在0配置技术之上的一种技术——换句话说,springboot改变了我们使用spring的姿势。

 

第二节

使用注解+javabean的方式实现Bean的注入

  1. 需要声明,该节内容并非springboot内容,而是演示如何零配置实现我们的IOC注入,注解+javabean的形式
  2. 程序的实现
  1. 首先建立一个工程,我们在这里建立一个再普通不过的java工程,工程结构如如:

  1. 编写相应的dao,service,test等类,另外还要编写一个java配置类

  1.  测试

执行MainTest,查看是否能够执行到UserDao的被调用的方法,测试成功。
4)备注

@Bean注解要求方法必须是public,返回值是注入要注入的对象的类型

 

第3节

创建我的第一个springboot工程

  1. 如何创建springboot工程?
  1. 创建一个普通的maven工程,然后手动将需要的springboot依赖添加进去即可
  2. 使用springboot官方网站来生成springboot工程的骨架,然后导入到IDE即可

  1. 使用springboot提供的一个IDE插件STS,该插件集成到我们的IDE中

 

  1. 使用第三种方式即STS创建我们的springboot工程
  1. 选择new-project-spring-spring starter project

           

2)填写工程基本信息,要求必须联网才能正常执行否则报连接错误的异常

3)创建工程,如果有需要的话在这里可以修改springboot的版本号

备注:

  1. 如果第一次创建工程的话,花费的时间会比较长,因为很多依赖需要下载。
  2. 本即可主要掌握使用STS插件创建springboot工程,另外需要注意必须联网该插件才能正常执行。
  3. Springboot2.0只支持JDK1.8以上的版本
  4. 随着官网http://start.spring.io上面版本的更改STS插件也会跟着更改版本信息。
  5. 简单讲解工程结构和引入的maven依赖包

 

 

 

 

 

第4节

编写我的第一个springboot应用程序

  1. 在上节工程springboothelloworld基础上编写程序
  2. 正式编写
  1. 修改pom.xml给定一个jar包的文件名称

  1. 编写pojo,dao,service,controller

这里编写的pojo,dao等所有组件跟之前springmvc工程中的所用注解或者编写流程一模一样,没有任何区别,参考代码。

  1. 测试
  1. 通过springboot的入口程序启动
  2. 通过java -jar xxx.jar来启动,可能受第一次影响占用8080,关闭eclipse即可
  3. 启动日志简单分析

可以看到,内置了8.5的tomcat,并且默认端口为8080.访问地址http://localhost:8080/getuser?id=1000

 

第5节

剖析springboot工程——工程结构

 

第一节

Spring技术的3个大的发展历史阶段

  1. spring1.x版本阶段

所有的依赖关系,都是使用xml进行描述——不管是IOC还是AOP的关系都是这样处理,都是历史背景决定的。

  1. spring2.x版本阶段

伴随着JDK1.5而来,它支持注解,使得xml配置文件的体积大大减小了,配置文件的数量也大大减少了。争论了很久 ,最终统一了使用方式:一些系统的配置使用xml完成,一些业务逻辑配置使用注解。

  1. spring3.x-spring4.x版本阶段

彻底的摆脱xml配置,完全使用注解+java类的形式。目前项目中还没有完全使用该种方式,以后纯使用该方式的机会也不大,因为springboot技术出来了,它就是建立在0配置技术之上的一种技术——换句话说,springboot改变了我们使用spring的姿势。

 

第二节

使用注解+javabean的方式实现Bean的注入

  1. 需要声明,该节内容并非springboot内容,而是演示如何零配置实现我们的IOC注入,注解+javabean的形式
  2. 程序的实现
  1. 首先建立一个工程,我们在这里建立一个再普通不过的java工程,工程结构如如:

  1. 编写相应的dao,service,test等类,另外还要编写一个java配置类

UserDao:

UserService:

SpringConfig:

MainTest:

  1.  测试

执行MainTest,查看是否能够执行到UserDao的被调用的方法,测试成功。
4)备注

@Bean注解要求方法必须是public,返回值是注入要注入的对象的类型

 

第3节

创建我的第一个springboot工程

  1. 如何创建springboot工程?
  1. 创建一个普通的maven工程,然后手动将需要的springboot依赖添加进去即可
  2. 使用springboot官方网站来生成springboot工程的骨架,然后导入到IDE即可

  1. 使用springboot提供的一个IDE插件STS,该插件集成到我们的IDE中

 

  1. 使用第三种方式即STS创建我们的springboot工程
  1. 选择new-project-spring-spring starter project

           

2)填写工程基本信息,要求必须联网才能正常执行否则报连接错误的异常

3)创建工程,如果有需要的话在这里可以修改springboot的版本号

备注:

  1. 如果第一次创建工程的话,花费的时间会比较长,因为很多依赖需要下载。
  2. 本即可主要掌握使用STS插件创建springboot工程,另外需要注意必须联网该插件才能正常执行。
  3. Springboot2.0只支持JDK1.8以上的版本
  4. 随着官网http://start.spring.io上面版本的更改STS插件也会跟着更改版本信息。
  5. 简单讲解工程结构和引入的maven依赖包

 

 

 

 

 

第4节

编写我的第一个springboot应用程序

  1. 在上节工程springboothelloworld基础上编写程序
  2. 正式编写
  1. 修改pom.xml给定一个jar包的文件名称

  1. 编写pojo,dao,service,controller

这里编写的pojo,dao等所有组件跟之前springmvc工程中的所用注解或者编写流程一模一样,没有任何区别,参考代码。

  1. 测试
  1. 通过springboot的入口程序启动
  2. 通过java -jar xxx.jar来启动,可能受第一次影响占用8080,关闭eclipse即可
  3. 启动日志简单分析

可以看到,内置了8.5的tomcat,并且默认端口为8080.访问地址http://localhost:8080/getuser?id=1000

 

第5节

剖析springboot工程——工程结构

 

  1. 入口类所在的包是controller,service,pojo,dao的父目录,因为该类在启动的时候会默认扫描它的同级目录和子目录。
  2. resources一般放置配置文件,其下的所有内容打包后会计入classes目录下。
  3. Application.properties是springboot工程的核心配置文件,打包后进入classes目录。
  4. static目录用来存放网站的静态资源,例如js,css,图片等内容。
  5. Templates目录用来存放网站的模板文件,例如freemaker,thymeleaf等

在springboot目录结构中,遵循的原则就是“约定大于配置”,使得配置文件更加简化,容易维护,可以把它看成是行业标准。

 

第6节

剖析springboot工程——pom.xml文件

  1. 继承的父依赖——这是必须的

从该父依赖中继承了springboot工程必须的一些jar包,该父依赖是springboot工程中必不可少依赖,它也是区别普通mavven工程的一个特点。

  1. 其他依赖——非必须的,根据选择的不同组件springboot帮我们添加相应的依赖

例如,上午创建的工程为web工程,那么它就自动添加了如下一类,如图:

  1. 打包的一个插件——这是必须的

这是springboot帮我们提供的一个插件,该插件可以根据第5节讲到的约定目录帮助我们将工程打包成可执行的jar包或者war包,如果没有这个插件,我们必须手动写pom代码。

 

第7节

剖析springboot工程——入口类

  1. 该入口类的位置

默认情况,该入口类会在比较父级的目录中,因为它要扫描同级目录和所有的子目录中带有spring注解的类(需要在spring容器创建对象)。如果放到子目录中必须指定要扫描的包的路径,不推荐这样做,按默认即可,例如:

备注:

Run方法中传入两个参数,第一个参数默认传入本类的class,也可以传入一个其他类,但是该类必须有SpringBootApplication注解。

  1. @SpringBootApplication注解

该注解是springboot工程的核心注解,没了它运行不了,同时它也是一个组合注解。

如图是定义该注解的代码:

即一旦使用了该注解,等价于把上面所有的注解都使用上了。总之,使用了该注解以后这个入口类就是一个java配置类,并且有了自动配置功能,并且还有了自动扫包的功能。

  1. 入口类的功能

根据上述描述,入口类由一个main方法启动,就会启动内嵌的tomcat或jetty容器,然后加载所有需要加载的或扫描的类或资源文件,进而初始化spring容器,完成对象的注入。

 

第8节

剖析springboot工程——可执行jar包和war包

  1. jar包的结构

备注:该配置文件是自动生成的,它里面指定了启动类,在执行java -jar命令的时候会自动加载该启动类。

  1. war包的结构

将第3节课工程中pom.xml中的packaging值由原来的jar直接改为war,其他配置不做任何改变,然后打成war包,其结构如下:

备注:通过java -jar helloworld.war命令执行该war包,成功。但是非jsp的应用一般不建议打war包。

  1. 作业
  1. 在static目录放一张图片,是否能够通过http://localhost:8080/a.jpg访问?
  2. 上本节课打的war包放置到tomcat中看是否能够执行?不能

 

 

 

第9节

认识springboot工程的配置文件——application.properties文件

  1. springboot支持的配置文件的格式

Application.properties和application.yml

  1. application.properties文件

为了满足个性化的需求,所以该框架提供了一个简单的配置文件,通过健值对的形式去配置自己的参数,并且这些健同application.properties名字一样,也是约定好的,springboot就可以自动读取这些键值对,不需要我们另外写程序完成。

  1. 完成工程默认tomcat端口和虚拟目录的配置

server.port=8090

server.servlet.context-path=/helloworld

  1. 打包测试

  1. 其他演示

 

 

 

 

第10节

springboot工程的特点小结

  1. springboot的特点
  1. springboot是建立在spring之上的,或者说是以spring为基础的。例如Springboot2.0是以spring5.x为基础的。内置tomcat版本为8.5.
  2. springboot遵循的原则是“约定大于配置”。例如:工程的目录结构,配置文件的名称,配置文件中的键值对....
  3. 开箱即用,内置了很多组件,只需要进入相应的依赖即可。例如:使用web组件只需要引入spring-boot-starter-web那么springmvc中的注解requestmapping等、内置web容器就自动添加好了。
  4. 自动配置,例如我们的tomcat,事务,mybatis等自动配置。
  5. 完全兼容spring,即spring支持的,它就支持。
  6. springboot不算是一种新技术的具体实现,它只是改变了我们使用spring的姿势。

 

第10节

自定义springboot启动时的banner图标

  1. 首先,需要准备一个这样的banner文件字符

打开http://patorjk.com/software/taag输入自己想要的文字,免费帮我们只做一个banner字符样式,不支持中文字符,例如:

  1. 在我们项目的resources目录下建立一个名称为banner.txt的文件,将上述只做的banner字符复制到该文件
  2. 重启服务即可看到最新的自定义banner
  3. 注意:该banner不是一个图片,而是用字符拼写的

备注:

  1. 在springboot2.0以后的版本还支持动态banner
  2. 也可以在SpringApplication对象中使用的setBanner方法将其关闭

 

第11节

springboot自动配置的原理

  1. 在创建springboot项目的时候pom.xml中的parent继承了很多的jar依赖,其中有一个名称为spring-boot-autoconfigure-2.0.2.RELEASE.jar的jar包,在该jar包中定义(实现)了组件的自动配置。
  2. 在上述jar包中的META-INF中有个一个名称为spring.fatories的声明性文件,内容部分如下:

当在pom.xml中一旦引入了某一个starter组件,那么就会在里找相应的自动配置类来实现自动配置。

  1. 自动配置的实现过程

打开一个XXAutoConfiguration的类,即可看到里面自动配置的实现过来,例如solr.

实现部分代码如下:

  1. solrproperties类中获取solr在application.properties中自定义的连接地址,如果没有自动以则使用默认的http://127.0.0.1:8983/solr

  1. 真真的实现类在SolrAutoConfiguration类中

本质还是使用spring中的@Configration和@Bean两个注解实现了将SolrClient对象注入到spring容器。此时,我们就可以在我们的程序中直接使用@Autowired注入solrClient对象去使用了,因为它已经存在于spring容器中了。

 

第12节

关闭springboot的自动配置

  1. 在spring.fatories文件中目前大概有140多种自动配置,每一种自动配置对应一个独立的技术组件,application.properties中支持的键值对大概有1000多项,这1000多项都是为这140多个技术组件服务的。
  2. 关闭自动配置,如下所示即可排除不想要的自动配置内容:

 

一般情况下,不建议手动配置。

 

第13节

将springboot项目发布到独立的tomcat

  1. 将第8节内容中的helloworld.war包发布到独立的tomcat下能否运行?

不能。

  1. 为什么不能运行?

因为该war包中缺少一个非常重要的文件——web.xml文件,所以外部tomcat在启动时无法知道该项目是一个标准的web项目,所以也就无法访问。备注:tomcat启动日志未看到springboot的banner图标。

  1. 如何解决上述问题?
  1. 使用sts创建一个war类型的web项目,取名springboottomcat
  2. 第一步成功后会自动生成一个ServletInitializer.java类,该类可以实现web.xml的功能,以便让外部的tomcat认识到该项目是一个web项目,从而进行加载。

  1. 跟之前一样,编写controller等方法
  1. 测试
  1. 将上述工程打包成war,然后使用java -jar xxx.war启动该项目,测试结果正常
  2. 将该war包复制到外部tomcat的webapp目录下,测试结果正常
  3. 这次启动tomcat后台日志有了springboot的banner图标,如下:

这是跟上次失败实验的一个不同之处,说明tomcat已经将该项目进行了加载。

第14节

在springboot项目中配置MVC并使用jsp作为视图模板

  1. 官网为什么没有默认支持jsp?
  1. 需要编译
  2. 所见非所得
  1. 官方推荐使用什么模板?

freemarker或者thymeleaf等模板。

  1. 如何在springboot项目中使用jsp?
  1. 跟上节课一样,建立名称为springbootjspwar的war项目,并引入web依赖
  2. 在第一步的基础上的pom.xml中增加对jsp编译支持的依赖,如下:

<dependency>

     <groupId>org.apache.tomcat.embed</groupId>

     <artifactId>tomcat-embed-jasper</artifactId>

</dependency>

  1. 在application.properties中进行参数配置,如下:

server.port=8080

server.servlet.context-path=/hellojsp

server.servlet-path=/

spring.mvc.view.prefix=/jsp/

spring.mvc.view.suffix=.jsp

备注:

  1. context-path的值是访问地址的虚拟路径,默认值是/
  2. servlet-path的值是dispatcherServlet的URL过滤规则,默认是/,还可以是*.do或者*.html或者其他后缀
  3. prefix的值是jsp目录前缀, 没有默认值,如果使用jsp的话必须配置
  4. suffix的值是jsp的后缀,没有默认值,如果使用jsp的话必须配置


4)编码

只需写一个简单的controller类和user.jsp即可,结构和内容如下:

  1. 测试
  1. 运行项目,访问http://localhost:8080/hellojsp/user,该war项目可以有3种运行方式:
  1. 入口类运行
  2. war包运行
  3. 放到外部tomcat运行
  1. 第一次测试没有成功,得到的页面内容为jsp源码内容或者下载jsp,原因是没有添加tomcat-embed-jasper依赖
  1. 备注
  1. 上述工程如果打包为jar包格式,则无法独立于eclipse环境而运行,会找不到jsp页面,除非将springboot替换为1.4.2版本;
  2. context-path的值只针对内置tomcat有效,如果将该war发布到外部tomcat则访问路径要按照server.xml中的虚拟路径访问;
  3. servlet-path值如果是*.do等,controller类中的RequestMapping()要做相应书写,例如:@RequestMapping("/user.do");
  4. prefix值是相对src/main/webapp而言的,这点跟传统的SpringMvc设置是一样的。
  5. 打包后的war结构如下图所示:

 

  1. 本节问题
  1. application.properties和application.yml共存导致冲突
  2. 声明的URL规则为*.do但是requestmapping中并没有写.do导致404
  3. 项目已经发布到外部tomcat但是访问是浏览器中地址写的仍是context-path中的地址导致404
  4. Controller类没有使用@controller注解导致404

 

 

 

 

 

 

第15节

使用@PropertySource读取外部资源文件

  1. 之前读取properties文件的方式
  1. 使用util包下的Properties类通过API的方式读取
  2. 使用spring.xml中的一个表签来完成内容的读取

2.使用注解的方式来完成读取

1)在springboothelloworld工程中做测试,新建ReadProperties,编码如下:

备注:

  1. 如果在dao层注入该类的话,该类必须被spring容器所管理,因此必须加Compoent注解
  2. PropertySource注解可以一次读取N个资源文件,使用逗号隔开
  3. Value注解中的el表达式必须对应资源文件中的key值
  4. 类的属性名称可以任意取一个,只要是合法的即可

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值