SpringBoot知识点总结(一、自动配置原理)

1.SpringBoot特点

  1. 依赖管理

引入依赖默认都可以不写版本

引入非版本仲裁的jar,要写版本号。

  1. 自动配置
  • 默认的包结构
    ○ 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
    ○ 无需以前的包扫描配置
    ○ 想要改变扫描路径,@SpringBootApplication(scanBasePackages=“com.xxxx”)或者@ComponentScan 指定扫描路径
@SpringBootApplication
等于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.xxxx")

● 各种配置都拥有默认值
○ 默认配置最终都是映射到某个类上,如:MultipartProperties(XxxxxProperties)
○ 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
● 按需加载所有自动配置项
○ starter场景
○ 引入了的场景,它的自动配置才会开启
○ SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面

2.容器功能

2.1、组件

  1. @Configuration
/**
 * 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
 * 2、配置类本身也是组件
 * 3、proxyBeanMethods:代理bean的方法
 *      Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
 *      Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
 *      组件依赖必须使用Full模式默认。其他默认是否Lite模式
 */
  1. @Bean、@Component、@Controller、@Service、@Repository

  2. @ComponentScan、@Import

@Import({XXX.class})
//导入第三方组件
  1. @Conditional
    条件装配:满足Conditional指定的条件,则进行组件注入
    @ConditionalOnBean: 容器中存在某个Bean组件时,加载指定代码
    @ConditionalOnClass: 类路径下存在某个类时,加载指定代码

2.2、 配置绑定

  1. @ConfigurationProperties
/**
 * 只有在容器中的组件,才会拥有SpringBoot提供的强大功能
 */
@Component
@ConfigurationProperties(prefix = "myproperties")
  1. @EnableConfigurationProperties
    开启配置绑定功能,导入第三方包

3.自动配置原理

3.1引导加载自动配置类

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

  1. @SpringBootConfiguration
  2. @ComponentScan
  3. @EnableAutoConfiguration
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}

@AutoConfigurationPackage

@Import(AutoConfigurationPackages.Registrar.class)  //给容器中导入一个组件
public @interface AutoConfigurationPackage {}

//利用Registrar给容器中导入一系列组件

@Import(AutoConfigurationImportSelector.class)

1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
2、调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类
3、利用工厂加载 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件
4、从META-INF/spring.factories位置来加载一个文件。
	默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
    spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories
    

3.2按需开启自动配置项

按照条件装配规则(@Conditional),最终会按需配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值