一.SpringBoot相较于Spring原始框架(SpringFramework)的区别
SpringBoot是对SpringFramework的优化,底层还是基于SpringFramework的
1.依赖管理
在原始框架SpringFramework(下文称Framework)中,我们需要在pom.xml里,自行寻找并导入海量的依赖,并且要仔细辨别各依赖的版本,避免互相冲突
而在SpringBoot(下称Boot)中,我们有了官方提供的起步依赖.
当引入spring-boot-starter-web后,Maven会根据依赖传递的特性,为我们自动导入web开发的常用依赖.
2.自动配置
在Framework里,我们需要不胜其烦的为Bean做声明和配置,极大的提高了学习成本和开发难度.
而在Boot中,我们可以通过自动装配,自动配置来帮助我们完成Bean的声明和配置.
在启动Spring的时候,常用的各配置类Bean对象就自动存入了IOC容器,省去了繁琐的操作.
二.Bean的管理
1.@Scope
singelton:默认值,单例
prototype:原型,多例
- 默认 singleton 的 bean,在容器启动时被创建,可以使用 @Lazy 注解来延迟初始化(延迟到第一次使用时)
- prototype 的 bean,每一次使用该 bean 的时候都会创建一个新的实例。
- 实际开发当中,绝大部分的 bean 是单例的,也就是说绝大部分 bean 不需要配置 scope 属性。
2.第三方的
加在方法上
默认 BeanName 为方法名字,可以通过 value 属性手动指定 beanName
形参可以完成注入
- 通过 @Bean 注解的 name 或 value 属性可以声明 bean 的名称,如果不指定,默认 bean 的名称就是方法名。
- 如果第三方 bean 需要依赖其他 bean 对象,直接在 bean 定义方法中设置形参即可,容器会根据类型自动装配。
三.SpringBoot的注解
1.Application注解
1.1 SpringBootConfiguration,
底层是一个Configuration,表示启动类也是一个配置类,可以在内部定义相关Bean
1.2 ComponentScan,
表示组件扫描,默认会扫描启动类包及子包下Spring能识别的组件
1.3 EnableAutoConfiguration,
底层是一个Import注解,该注解中导入 AutoConfigurationImportSelector类,该类中有一个selectImports 方法会被调用,该方法最终会去加载
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中的内容,并筛选满足starter和各种Conditional条件的全类名,封装成一个字符串数组加载到内存中
2.Run方法
启动类会通过run方法去创建与初始化Spring容器,在初始化时会把上面注解加载到内存中的字符串数组对应的内容,创建成对象注入到Spring容器,至此就完成了自动化装配
四.自定义starter
1.定义一个xxx-boot-starter
只负责管理依赖,导入下面的autoconfigure依赖,不写代码
2.定义一个xxx-boot-autoconfigure
完成功能代码 定义一个XxxAutoConfiguration 类完成bean的创建和注入 通过的Spring自动化装配原理完成XxxAutoConfiguration 类的初始化操作
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中增加 XxxAutoConfiguration的全类名