1.什么是springboot
springboot是spring生态圈的一个轻量级的框架,换句话说springboot就是spring,是spring的一个衍生版本。
使用spring框架,项目搭建完毕,spring无法实现任何代码,也就是需要开发人员自己去配置连接数据库,配置需要集成的框架mybatis,shiro等,以及对集成进来的框架进行xml配置,需要开发人员自己编写配置文件,自己进行整合。
springboot框架其实就是已经集成好的框架的spring,就像是maven集成了很多的jar包一样,springboot继承好了很多的框架,在使用时,直接根据springboot提供的标准编写即可,不在需要配置xml文件。maven的思想是:约定优于依赖,springboot的思想是:约定优于配置。springboot官方给出的解释就是干掉xml文件,使用java代码进行编写配置。
面试题:如何区分轻量级重量级?
在项目中轻量级的框架会对自己项目中的代码有很少的侵入,如:
hibernate:自动生成sql语句,使用hql编辑sql语句,如果有一天不使用这个框架了,那么就需要再自己写sql语句
mybatis:不使用该框架时,里面的sql语句仍然可以使用
2.为什么要使用springboot?
傻瓜式开发,减少了大量的配置,降低了开发人员的标准,低层次的开发人员也可以进行业务逻辑的编写,无需知道内部运行原理以及框架的集成和整合。
4.怎样使用springboot?
目标:使用springboot在浏览器显示hello world!
准备,创建maven工程,引入springboot的依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zs.springboot</groupId> <artifactId>springboot</artifactId> <version>1.0-SNAPSHOT</version> <!--将maven工程的父类设置为springboot,就表示该工程时springboot的一个子工程--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> </parent> <dependencies> <!--在springboot中会定义很多个starter,每一个starter都有自己不同的作用 web-start:引入项目所运行的基础环境 tomcat:最终springboot会自动把tomcat集成进项目中,不再需要使用外部tomcat进行启动 各种注解 @Controller @Service @RequestMapping @ResponseBody --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
我们点开父工程:
按住ctrl键点开该父工程可以看到:
spring-boot-starter-parent 的父工程为 spring-boot-dependencies ,而spring-boot-dependencies是顶级的父工程,是管理springboot的依赖的,只负责管理依赖,就像上一篇maven中的父工程一样,我们点开
查看父工程,一级一级网上看:
spring-boot-starter-web的父工程是spring-boot-starters
spring-boot-starters的父工程是spring-boot-parent
spring-boot-parent的父工程是spring-boot-dependencies,spring-boot-dependencies只是用来管理jar包的依赖,我们的项目继承了 spring-boot-starter-parent ,而它与parent虽然不一样,但是理论上,它在parent中,因此我们的项目就是与内部的 spring-boot-starter-web一样,是平级的,
yi用一个图来帮助理解:
在上面已经继承springboot,引入了依赖,下面开始使用springboot:
1.编辑启动类@springbootApplication
package com.zs.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApplicatonRun { public static void main(String[] args) { SpringApplication.run(ApplicatonRun.class, args); } }
/**
* 1.注意!!!!!!!ApplicationRun类必须要放在所有业务的上一层
* model包
* mapper包
* com.zs.springboot.model
* com.zs.springboot.mapper
* 也就是说至少需要把ApplicationRun放在springboot包下
*
* 2.就是springboot的入口类
* 也就是通过这个类启动整个项目
* @SpringBootApplication:
* 自动加载springboot所需要额配置
* 并且把ApplicationRun类标识为整个项目的入口类
*
* 3.最终springboot是根据SpringApplication.run()来进行运行的
* 所需要传递两个参数:
* ApplicationRun.class
* 让springboot整个框架知道ApplicationRun类就是整个项目入口类
* args:main形参
*/
2.编辑controller:
/** * RestController,相当于controller和responseBody两个注解的合体,使用该注解这个控制器都返回json对象 */ @RestController public class TestController { @RequestMapping("/test") public String fun1() { return "hello world"; } }
运行,输入地址测试。
5.springboot的运行原理:
作用:实现自动配置,
点开springbootApplication注解,
可以看到这是一个组合注解:
@SpringBootConfiguration:springboot所必须要的基础配置,相当于spring中的application.xml
@EnableAutoConfiguration:允许自动加载配置
点开EnableAutoConfiguration注解,这也是一个组合注解:
@AutoConfigurationPackage:通过扫描包的形式自动加载,(例如:mybatis的mapper扫描器)
@Import:导入,与spring配置文件中的improt标签的意思一样,
AutoConfigurationImportSelector:
EnableAutoConfigurationImportSelector:自动加载配置的选择器(根据条件进行自动加载配置)
继承了AutoConfigurationImportSelector
AutoConfigurationImportSelector类中有一个方法:
getCandidateConfigurations():根据某个特定的条件获取配置信息
可以看到loadFactoryNames()方法:通过name属性值来获取加载器信息。点击SpringFactoriesLoader进入,可以看到:
对源码进行分析:该方法会加载FACTORIES_RESOURCE_LOCATION也就是spring.factries配置文件中的配置信息,然后返回,
每一个jar包都有一个该文件:
loadFactoryNames()方法通过这个文件来进行加载配置,最后根据factories文件映射到配置类中,如:
MybatisAutoConfiguration.java是经过xml配置文件转换来的,和xml配置文件一样的作用
6.配置文件:
添加myatis依赖后,重启项目会报错?原因:找不到数据源,需要配置数据源
在springboot中配置数据库:
配置文件要按照springboot官方规定的形式配置,需要使用yml或properties作为配置文件
命名有规范,必须使用application作为文件名,否则springboot无法识别
application.yml或application.properties
存放位置有规定:
官方推荐把配置文件放在resources目录(classpath)-->config文件夹
如果config文件夹springboot没有检测到会从resources目录下去找
resources:classpath(根目录)
resources/config
如图:
#配置servlet #配置端口号 server.port=8888 #配置虚拟路径 server.servlet.context-path=/zs #配置数据源 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456
附上常用配置: