SpringBoot#(一)

本文介绍了SpringBoot的基本概念,强调其简化Java开发的优势,包括约定优于配置的特点。内容涉及微服务架构、SpringBoot的自动配置原理,以及配置文件的使用,特别是YAML文件的灵活性和与spring.factories的关系。

什么是spring

spring是为了解决企业级应用开发的复杂性而创建的开源框架

为什么spring能够简化JAVA开发

  • IOC和DI
  • AOP和模版

SpringBoot

什么是springBoot

是一个javaWeb的开发框架,类似于springMVC,迅速开发web应用的框架.
关键词:约定大于配置

java企业级应用的历史:J2EE–>Spring–>SpringBoot

SpringBoot的优点

更容易的spring;开箱就用,有很多默认配置;内嵌服务器代码;没有冗余代码生产和XML配置要求

微服务架构

将业务在拆分变成模块
单体应用架构:将数据库访问,web访问等等各个功能放到一个war包中
微服务架构:把每个功能元素独立出来,在需要功能时,拿出这些元素进行动态组合实现功能,
(对功能进行复制,而不是整个应用进行复制).
好处:节省调度资源,每个功能元素可替换,可独立升级代码.
tips:程序核心特点:高内聚,低耦合

将一个个controller打包成jar包,可以单独开启和应用.

springboot原理

自动配置:

pom.xml

  • parent:存放了核心依赖
  • 引入springboot依赖时不需要指定版本,因为有版本仓库
    启动器:
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>``

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
	启动web应用的环境

主程序:

@SpringBootApplication
//这个注解标注这个类是一个spring应用,
public class Springboot01HelloworldApplication {

    public static void main(String[] args) {
    	//启动springboot应用,run方法.springApplicatiion类
			  SpringApplication.run(Springboot01HelloworldApplication.class, args);
    }

}
//其它注解
@SpringBootConfiguration	springboot的配置
@EnableAutoConfiguration	自动配置

自动配置注解生效的原理:
springboot的所有自动配置,都是在启动的时候扫描(扫描的文件是:spring.factories)并加载.所有的自动配置类都在此文件中,但是自动配置类不一定生效;想要生效,应该导入对应的start(启动器),有了对应的启动器,就会判断条件成立,生效对应的自动配置类.
具体步骤:

  • 1.springboot启动时通过启动类的信息在 spring-boot-autoconfigure-2.5.4.jar/META-INF/spring.factories中获取对应的值;
  • 2.获得了值后,会自动将与启动类对应的类自动配置到容器中.
  • 3.容器中有很多xxxAutoConfiguration的文件(就是@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并自动配置.
  • .我们以前要自动配置的类现在,springboot帮我们做了.
  • .同时我们可以知道javaEE对应的所有配置类都在spring-boot-autoconfigure-2.5.4.jar当中,我们从中获取想要的配置类.
主动类运行原理:

SpringApplication.run(SpringbootApplication.class, args);

SpringApplication类主要做了以下事:
一.初始化实例对象
1.判断应用类型是普通项目还是web项目
2.查找并加载所有有用初始化器.设置到initializer属性中
3.找出所有应用程序监听器,设置到liseners属性中
4.推断并设置main方法的定义列,找到运行的主类
(通过类加载器spring.factories,获取文件工厂类的全路径,通过反射,得到工厂的class对象,构造方法,生成工厂类实例)

二.对象执行run方法
1.启动监听器(headless系统属性设置,初始化监听器,启动监听器)
2.获取并装配环境参数(创建配置环境,加载属性资源,加入监听器集合)
3.打印banner图案
4.上下文区域(通过装配环境得到应该创建什么上下文(web/普通))
5.准备上下文异常报告器
6.上下文前置处理
7.上下文刷新
8.上下文后置结束处理
9.发布应用
10.执行runner运行器
11.发布应用上下文就绪并返回
12.SpringApplication启动结束

springboot配置文件可以配置什么

配置文件类型只有两种:yaml或者properties,
对应的配置格式"key:(空格)value" , “key=value”;
后者只能表示键值对,前者能够像语言保存.

YAML文件

一种标记语言
一.可以对实体类赋值

@Component//注册bean
@ConfigurationProperties(prefix = "person")
//告诉springboot本类中的所有属性将和配置文件中相关配置进行绑定
//prefix = "person":将配置文件中的person下面的属性进行一一对应
@Validated//数据校验
public class Person {
	private String last-name;
	@email//必须按照邮箱格式注入下列属性
	private String email;
	@Pattern//验证String对象是否按照正则表达式书写
	private String string;
	...

Yaml文件

person:
  lastName: ${random.uuid}
  age: ${random.int}
  happy: false
  birth: 2000/11/01
  maps: {k1:v1,k2:v2}
  lists:
    - code
    - music
  dog:
    name: cat
    age: 3
  email: xxxxxx@xxx.com

1.支持批量赋值,随机赋值
2.松散绑定(能够让属性名变得松散,如last-name等价于lastName)
3.JSR303数据校验(让数据能够按照固定格式输入)
4.复杂类型的封装

二.YAML文件可以存放的位置
(优先级从高到低)
1.file:./config/
2.file:/
3.classpath:/config/
4.classpath:/
同级配置下选择不同配置(选择dev配置)
spring:
profiles:
active: dev

配置文件和spring.factories的关系

用spring.factories中的一个类举例:

//表示这是个配置类
@Configuration(
    proxyBeanMethods = false
)
//下面两句都是判断此类是否有效的
@ConditionalOnClass({CodecConfigurer.class, WebClient.class})
@AutoConfigureAfter({JacksonAutoConfiguration.class})
//自动配置属性CodecProperties
@EnableConfigurationProperties({CodecProperties.class})
public class CodecsAutoConfiguration {
    private static final MimeType[] EMPTY_MIME_TYPES = new MimeType[0];
    .....

CodecProperties类

@ConfigurationProperties(
    prefix = "spring.codec"
)
public class CodecProperties {
    private boolean logRequestDetails;
    private DataSize maxInMemorySize;

以上可以知道,我们能通过yaml文件对spring.factories中的类进行属性配置,配置文件能够修改springboot中的类
CodecsAutoConfiguration->
CodecProperties->
yaml(spring.codec)

普遍规律:
xxxAutoConfiguration(组件)->
xxxProperties(组件的属性)->
yaml(spring.xxx)
===>spring.xxx组件.xxx属性=zzz;//将xxx注入为zzz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值