SpringBoot对Spring的缺点进行改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,可以更好地投入到逻辑业务的代码编写中,从而大大提高了开发的效率。
1. 起步依赖
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起支持某项功能。简单地说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
2. 自动配置
SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。
建一个正常的maven工程,然后配置POM.xml
<?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>
<!-- 所有的springboot工程都必须继承spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<groupId>1</groupId>
<artifactId>springboot_quick</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- web功能的起步依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
再写一个启动类,我们叫MySpringBootApplication.java
package com;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//声明该类是一个springBoot引导类
@SpringBootApplication
public class MySpringBootApplication {
//main是Java程序入口
public static void main(String[] args) {
//run方法 表示运行SpringBoot的引导类 run参数就是SpringBoot引导类的字节码对象
SpringApplication.run(MySpringBootApplication.class);
}
}
注意:哪个类上面有@SpringBootApplication,哪个类就是引导类。
启动下,控制台打印如下:
编写个controller类,如QuickController.java
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class QuickController {
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "hello springboot";
}
}
再次启动下tomcat,后在页面上输入网址localhost:8080/quick
目的是为了修改代码后,可以让他自动加载不用来回重启服务。在pom加个配置。
<!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
注意:IDEA进行SpringBoot热部署失败原因解决,修改IDEA进行自动编译的设置
选择Spring Initializr
起个域名、包名等
选择Web
生成后发现,之前导入的坐标和创建的启动类。IDEA都自动给我们生成好了。
起步依赖
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
自动配置
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
YML文件格式是YAML(YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互,可以被支持YAML库的不同的编译语言程序导入,比如:C/C++ Ruby Python Java Perl C# PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
YML文件的扩展名可以使用 .yml 或者 .yaml
优先级:.properties > .yaml > .yml
语法:key:value
示例代码:
#普通数据配置
name: hahaha
注意:value之前有一个空格
#对象的配置
person:
name: wangwu
age: 18
addr: dalian
#行内对象配置
person: {name: zhangsan,age: 18,addr: dalian}
这个跟上面的等价,大部分情况配置用上面那种方法
# 配置数组、集合(普通字符串)
city:
- beijing
- tianjing
- chongqing
- shanghai
#或者
city: [beijing,tianjing,shanghai,chongqing]
# 配置数组、集合(对象数据)
student:
- name: tom
age: 18
addr: beijing
- name: lucy
age: 17
addr: shanghai
#或者
student: {{name: tom,age: 18,addr: beijing},{name: lucy,age: 17,addr: tianjing}}
#Map配置
map:
key1: value1
key2: value2
我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上
优点:精确匹配
缺点:特别繁琐
@Value("%{name}")
private String name;
@Value("%{person.addr}")
private String addr;
@ConfigurationProperties(prefix = "person")
public class AAA {
private String name;
private String addr;
@RequestMapping("/qqq")
@ResponseBody
public String qqq(){
//获得配置文件的信息
return "name:"+name+",addr="+addr;
}
//创建get、set方法
//。。。
}
<!--@ConfigurationProperties的执行器的配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>