SpringBoot原理

配置优先级

在这里插入图片描述
分别配置在VM options和programme arguments中
在这里插入图片描述
通过运行知道,命令行参数优先级高于Java系统参数

在这里插入图片描述
在这里插入图片描述

打包,直接找到Maven中的当前工程直接执行package周期就可以打包了

在这里插入图片描述
命令行参数和系统属性要高于配置文件

Bean管理

获取Bean

在这里插入图片描述

三种获取IOC容器中Bean对象的方法

在这里插入图片描述

Bean的作用域

在这里插入图片描述
默认单例,在程序启动的时候就Bean就进行了初始化
可以加@Lazy注解,使Bean对象第一次使用的时候再进行初始化。 (目前感觉没有什么大用)

通过Scope注解指定Bean的作用域,如果设置为prototype,每一次使用该对象都会进行一次实例化。

在这里插入图片描述
在这里插入图片描述

第三方Bean

如果使用第三方Bean对象,每一次使用都需要将其实例化一遍,导致效率变低。也不能直接加@Component注解进行Bean对象生命
在这里插入图片描述
方法:加上@Bean注解,这样Spring就会将这个对象交给IOC容器管理,就可以用autowired直接注入第三方对象。
在这里插入图片描述
在这里插入图片描述
但是直接定义在启动类中不建议,可以单独创建一个配置类然后将第三方对象的方法全部定义在配置类中
在这里插入图片描述

如果没有指定Bean的名称,默认为方法名
在这里插入图片描述

第三方Bean的依赖注入

直接把需要注入Bean对象的类作为参数传递到方法中,就会自动调用方法,根据指定的类型完成自动装配
在这里插入图片描述
在这里插入图片描述

总结
在这里插入图片描述

SpringBoot原理

在这里插入图片描述
在这里插入图片描述

起步依赖

在这里插入图片描述

SpringBoot中只需要引入一个依赖,就可以引入需要的全部依赖。原理是依赖传递

在这里插入图片描述

自动配置

SpringBoot在启动时自动加载了很多的类,创建Bean对象交给IOC容器。在使用时可以直接用Autowired进行对象注入。
在这里插入图片描述
在这里插入图片描述

自动配置原理

SpingBoot只能自动扫描启动类所在包及其子包

@ComponentScan注解
在这里插入图片描述
记得加上启动类所在包,否则该包会被覆盖

但是用这种方法,设置扫描会很麻烦,而且性能不高
在这里插入图片描述
@import注解
在这里插入图片描述
在这里插入图片描述

Enable后面跟对应的类或者配置类

源码跟踪

启动类中的注解
在这里插入图片描述
我们发现,启动类导入了一个AutoConfiguration注解,用于导入AutoConfiguration,这个类实现了一个ImportSelector接口

在这里插入图片描述
有一个抽象函数,返回需要导入的配置类,通过autoConfigurationEntry对象的getConfiguration()函数进行对应Configuration的获取
在这里插入图片描述

通过getAutoConfigurationEntry进行获取AutoConfigurationEntry对象。这个对象函数里面获取了两个List集合属性,一个就是我们需要的Configuration属性,另一个是exclusions属性

在这里插入图片描述
在这里插入图片描述

通过getCandidateConfiguration函数进行获取,在这个函数中,new了一个List对象,构造函数中,Spring调用了loadFactoryNames函数,下面进行了一个断言,判断configurations集合是否为空,如果为空则返回对应的错误信息。

指示在这两个文件中没有对应的自动配置类信息。据此我们可以知道。在Spring项目启动时,首先从这两个文件中找到需要配置的自动配置类,封装为List集合后加载到IOC容器中
在这里插入图片描述
在这里插入图片描述

我们发现,之前配置的第三方类都会有一个autoconfiguration文件
在这里插入图片描述

而在Spring的autoConfiguration文件中,有一个META-INF文件,其中有一个sping.factory文件这份文件中储存了很多的配置信息。
在这里插入图片描述

在这里插入图片描述

Spring目录下还有一个,import文件,其中储存了所有第三方库的自动配置类的全类名。当spring启动时,就会读取这两个自动配置文件。
在这里插入图片描述
在这里插入图片描述
这些自动配置类都会带一个AutoConfiguration注解,
在这里插入图片描述
这个注解中,封装了一个Configuration注解。
在这里插入图片描述
其中定义了一个Bean对象。利用配置类定义相应方法的方式,将本类交给了IOC容器管理
在这里插入图片描述
在这里插入图片描述

.factories文件是早期版本使用的自动配置方法,在2.7.x注解中可以兼容,但是到了3.x版本已经被开发者移除/现在所有的配置都在第一个文件中完成。
在这里插入图片描述

并不是Spring一启动就会将所有类进行装配
在这里插入图片描述

在这里插入图片描述

ConditionalOnClass注解:当前环境中有这个类才会进行声明
在这里插入图片描述

ConditionalOnMissingBean–(指定类型或者名称):判断当前环境中有没有对应的Bean(声明指定的类型),如果没有才会进行声明。
这个注解相当于声明一个默认的Bean对象。如果用户自己定义了同名的Bean,这个声明就不会生效,如果自己没有定义就会使用这个默认的Bean。

ConditionalOnProperties
在这里插入图片描述
如果在配置文件中有对应的键值对,则启动时就会对这个第三方Bean进行声明

SpringBoot当中使用Conditional注解的案例:
在这里插入图片描述

案例(自定义Starter)

在这里插入图片描述
SpringBoot官方一般是SpringBoot开头,第三方一般是第三方插件名称开头
在这里插入图片描述

在这里插入图片描述

步骤:
1.创建SpringBoot模块
2.删除pom文件当中多余的依赖
3.删去工程文件夹中除了iml文件和pom文件以外的多余文件,如果没有iml文件,在工程目录下cmd然后运行 mvn idea:module 即可
4.创建autoconfigure模块,删掉启动类和测试类以及启动依赖
5.在starter的maven里面添加autoconfigure

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值