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

被折叠的 条评论
为什么被折叠?



