springboot不是一个新的框架,他是一种技术,是对现有框架spring缺点的一些完善。
spring框架存在的缺点:
- Spring的组件代码是轻量级的,但它的配置却是重量级的,一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。
除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。 - 缺点总结:pom依赖难以选择合适版本,与其他框架整合困难,配置文件太多。
springboot解决两大缺点的技术要点:
- 约定优于配置思想。
比如说集成tomcat,我们以前需要在和spring整合以后继续配置端口号,和应用contextpath,这些重复的每个人敲代码都需要配置的就相当于一种约定,约定大于配置,就是说这些配置springboot在一个专门的配置类之中都帮我们定义了,如整合mybaties工厂我们不用配,事务我们不用配,整合redis我们不需要管配置,直接用就好。如果需要修改固定配置,在datasource包下配置yml文件即可更改配置。
- 常用pom依赖打包处理。
如,如果我们需要用到web只需要在pom文件中导入:
- 起步依赖(必须)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
-
web模块的依赖
<!--web功能的起步依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
总结:我们不需要再考虑兼容性问题,springboot搞了模块话管理并解决了冲突问题。
关于springboot的注解:
在我们使用springboot时候需要配置一个起步类,并在类上面写一个注解@SpringBootApplication这个注解能分成三个注解有三个作用:
//说明他是一个配置类
@SpringBootConfiguration
//加载约定大于配置的配置项
@EnableAutoConfiguration
//扫描配置了@SpringBootApplication的类所在的包和下面所有的子包
@ComponentScan
配置文件与配置类的属性映射:
第一种方式:
//如在yml配置实体类如下
person:
name: zhangsan
age: 181
//那么在注入实体类属性时候应该这么注入,此时属性名称随便起
@Value("${person.name}")
private String name;
@Value("${person.age}")
private Integer ag
第二种方式:
//如注入属性过多可以如此配置,这个时候yml的名字应该和要注入的属性名字保持一致。
@ConfigurationProperties(prefix = "person")
public class QuickStartController {
private String name;
private Integer age;
}
SpringBoot工程的热部署:
//我们在开发中反复修改类、页面等资源,每次修改后都是需要重新启动才生效,这样每次启动都很麻烦,浪费了大
量的时间,我们可以在修改代码后不重启就能生效,在 pom.xml 中添加如下配置就可以实现这样的功能,我们称
之为热部署。
<!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
注意:IDEA进行SpringBoot热部署失败原因出现这种情况,并不是热部署配置问题,其根本原因是因为Intellij IEDA默认情况下不会自动编译,需要对IDEA进行自动编译的设置,如下: