Spring Boot入门知识

Spring Boot 简介

什么是Spring Boot

Spring boot是构建所有基于Spring应用程序的启动。 它消除了设置 Spring应用程序所需的xml配置,Spring boot整合了所有的框架,为更快,更高效的开发生态系统铺平了道路,它的核心思想是:约定优于配置,Spring boot开发细节都是依据此思想就行实现的。

总结:
基于Spring升级或者再次封装的一个框架,消除了spring框架的xml配置,提高了开发效率,核心思想,约定大于配置

Spring Boot 的优势

(1)Spring Boot 使开发变得简单,提供丰富解决方案,快速集成各种解决方案提升开发效率。
(2)Spring Boot 使配置变得简单,提供丰富的Starters(启动器),集成开源产品只需要简单的配置
(3)Spring Boot 使部署变得简单,内嵌启动容器,仅需要一个命令启动项目。
(3)Spring Boot 使监控变得简单,自带监控组件,使用Actuator(执行器),轻松监控服务各项状态

Spring Boot 的核心

约定优于配置

约定优于配置(Convention Over Configuration),也称作按约定编程是一种软件设计范式。目的在于减少软件开发人员所需要做出的决定的数量,从而获得简单的好处,而又不失去其中的灵活性。

本质是说:开发人员只需要规定应用不符约定的部分

Spring Boot JPA就是约定优于配置最佳实现之一,不需要关注表结构,我们约定类名即为表名,属性名即是表的字段,特殊要求的属性,我们需要单独配置,按照这个约定我们可以将以前的工作大大的简化。
Spring Boot的体系将约定优配置思想展现的淋漓尽致,小到配置文件,中间件的默认配置,大道内置容器,生态中的各种Starter(启动器)无不遵循此设计规则。Starter核心之一就是autoconfigure(自动配置)模块,在启动的时候就行装配,属性默认化配置。

Spring boot简化配置和众多的Starter才让Spring boot变的简单,约定优于配置让Spring boot容易上手

Starters 启动器

Starter可以理解成启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例和依赖包。

Spring boot Starter基于约定优于配置的理念设计,Spring boot Starter中有两个核心组件:自动配置代码和提供自动配置模块及其它有用的依赖。

Spring boot整合了主流的开源软件形成一系列的Starter,形成了一致的编程体验来集成各种软件,Spring boot在集成做出了巨大的优化,让我们集成的时候只需要很少配置和代码来实现,可以说各种Starter就是Spring boot最大的优势之一。
常用的Spring Boot Starter列表
在这里插入图片描述

总结:
Starter是Spring Boot官方让我们管理依赖更加方便,整合了主流开源软件形成了一系列Starter,通过简单的配置某个Starter就可以使用此软件默认功能。

自动配置工作原理

@SpringBootApplication启动注解类

//约定大于配置
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@SpringBootApplication注释里面又包括三个注解:
@SpringBootConfiguration:SpingBoot配置;
@EnableAutoConfiguration:自动配置;
@ComponentScan:组件扫描。

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
}

@SpringBootConfiguration里面又包含了@Configuration注解,使用@Configuration注解标注的类表示一个配置类,可以代替xml配置bean,意味着可以在启动类中添加带有@Bean注解的方法进行一些配置。

@ComponentScan注解表示扫描组件,启动类间接包含该注解,表示会扫描启动类所在的包及子包下的注解配置。

@EnableAutoConfiguration注解开启配置,它主要通过@Import注解导入了AutoConfigurationImportSelector类

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}

AutoConfigurationImportSelector有很多方法,自动配置生效最主要的方法之一就是getCandidateConfiguration方法

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
		List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
				getBeanClassLoader());
		Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
				+ "are using a custom packaging, make sure that file is correct.");
		return configurations;
	}

getCandidateConfiguration方法会调用SpringFactoriesLoader.loadFactoryNames()方法,
该方法会查找spring-boot-autoconfigure.jar中定义的META-INF/spring.factories文件
在这里插入图片描述
spring.factories文件中定义了应用运行是所有可能自动配置的类,每用过xxxAutoConfiguration类都是容器中的一个组件,会加入到spring容器中,加入到容器中的作用就是用它们来做自动配置,这就是spring Boot自动配置之源

Starter 的启动过程
  1. Spring Boot 在启动时会去依赖Starter包中寻找spring.factories文件,然后根据文件中的配置的jar包去扫描项目所依赖的jar包
  2. 根据spring.factories配置价值AutoConfigure类
  3. 根据@Conditional注解条件,进行自动配置并将Bean注入Spring Context

总结:
其实就是Spring Boot在启动的时候,按照约定去读取Spring Boot Starter的配置信息,再根据配置信息对资源进行初始化,并注入到Spring容器中,这样Spring Boot启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应Bean资源即可。

Spring Boot 的配置

Spring Boot 对开发人员最大的好处在于可以对Spring应用进行自动配置,而且自动配置功能是没有侵入性的,只是作为一种基本的默认来实现的。开发人员可以通过定义其他配置,来替代自动配置所提供的功能。

全局配置文件

Sprin Boot全局配置文件:

  1. application.properties
  2. application.yml

两个文件的作用:可以覆盖Spring Boot自动配置的默认值。
application.properties 语法

com.li.name=li
com.li.email = 94235194@qq.com

创建bean引用

@Component
@ConfigurationProperties(prefix = "com.li")

public class LiInfo implements Serializable {
    private String name;
    private  String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

使用:

@RestController
public class Holle {
    @Autowired
    public DemoserviceImpl demoservice;
//    @Value("${com.li.name}")
//    private  String name;
//    @Value("${com.li.email}")
//    private   String email;
    @Resource
    private LiInfo liInfo;
    @RequestMapping(value = "/hello")
    public String hole(){
        String msg =demoservice.sayHello();
        msg +=" "+liInfo.getName()+" "+liInfo.getEmail();
        return  msg;
    }

YAML简介:
yml是YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心,比json,xml等更适合做配置文件

yml和xml相比,少了一些结构化的代码,使数据更直接,一目了然
yml和json相比,没有谁好谁坏,合适才是最好的。yml的语法比json优雅,注释更标准,适合做配置文件,而json作为一种机器交换格式比yml强,更适合做api调用的数据交换。

​ YAML:配置例子

server:
  port: 8081

相当于XML:

 <server>
	<port>8081</port>
</server>

YAML语法:
1. 基本语法
k:(空格)v:表示一对键值对(空格必须有);

以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

server:
    port: 8081
    path: /hello

属性和值也是大小写敏感;
2. 值的写法
字面量:普通的值(数字,字符串,布尔)
​ k: v:字面直接来写;

​ 字符串默认不用加上单引号或者双引号;

​ “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

​ name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi

​ ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

​ name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
3. 对象、Map(属性和值)(键值对)
k: v:在下一行来写对象的属性和值的关系;注意缩进

​ 对象还是k: v的方式

friends:
		lastName: zhangsan
		age: 20

行内写法:

friends: {lastName: zhangsan,age: 18}

4. 数组(List、Set):
用- 值表示数组中的一个元素

pets:
 - cat
 - dog
 - pig

行内写法

pets: [cat,dog,pig]

5. 配置文件值注入
配置文件 application.yml

person:
    lastName: hello
    age: 20
    boss: true
    birth: 2018/03/18
    maps: {k1: v1,k2: 12}
    lists:
      - hfbin
      - zhaoliu
    dog:
      name: dog
      age: 12

javaBean:

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

使用 @ConfigurationProperties 注解在idea会给我们提示,需要导入配置文件处理器。
在pom导入配置文件处理器,以后编写配置就有提示了:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
  </dependency>

可能会出现乱码:
在这里插入图片描述

自定义配置文件

1. 变量方式
第一步:application.properties增加属性

my.prop.name = 张三
my.prop.sex =

第二步:应用类上通过注解获取属性

@Component
public class MyClass{
    @Value("${my.prop.name}")
    private String name;

    @Value("${my.prop.sex}")
    private int sex;
}

2. 类方式
第一步:application.properties增加属性

my.prop.name = 张三
my.prop.sex =

第二步:定义属性寄存类

@Component
@ConfigurationProperties(prefix ="my.prop")
public class MyProp{
    private String name;
    private String sex;
}
注意:注解ConfigurationProperties的prefix前缀+"."+寄存类属性名称 = 配置属性的key,如 "my.prop" +"."+"name" = "my.prop.name"

第三步:应用类上通过注解获取属性

@Component
public class MyClass{
    @Resource
    MyProp myprop;
}

点击查看-----------Java虚拟机基础知识

点击查看-----------String,StringBuilder,StringBuffer的区别

点击查看----------Oracle基础知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值