参考资料
什么是Spring Cloud
是个规范,其实现有Spring Cloud Alibaba,Spring Cloud Netflix
SpringCloud 解决以下问题
Spring Cloud 核心 springboot
Spring boot 核心
- Starter组件
- 自动装配
- Actuator
- Spring Boot CLI
自动装配原理
- 自动装配约定规范
- @SpringBootApplication ->@EnableAutoConfiguration->@Import(AutoConfigurationImportSelector.class)
其他Enablexxx有类似的流程,最终会Import 一些configuration类来实例化bean
AutoConfigurationImportSelector
实现了ImportSelector
- ImportSelector有一个selectImports抽象方法,返回一个String数组,这里可以指定要加载的类
- import一个 ImportSelector时 ,就会装载selectImports返回的指定类到容器里
原理分析
- AutoConfigurationImportSelector中 selectImports干了什么
- 从META-INF/spring-autoconfigure-metadata.properties加载自动装配的条件元数据/满足条件的bean才能装配
- 收集所有符合条件的配置类 完成自动装配
- AutoConfigurationImportSelector不执行 selectImports 方法,是由ConfigurationClassPostProcesser的 processConfigBeanDefinitions方法来扫描注册所有配置类
public String[] selectImports(AnnotationMetadata annotationMetadata) {if (!isEnabled(annotationMetadata)) {return NO_IMPORTS;}AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata);return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());}
- AutoConfigurationImportSelector中 selectImports干了什么
getAutoConfigurationEntry
- 获得exclude excludeName等属性
- getCandidateConfigurations 获取所有自动装配的配置类 //重点
- 去除重复配置
- getExclusions 移除一些类
- 广播
- 返回集合
- getCandidateConfigurations
- SpringFactoriesLoader
- 扫描 META-INF/spring.factories
```properties
Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
….
```javaprotected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),getBeanClassLoader());Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "+ "are using a custom packaging, make sure that file is correct.");return configurations;}
- @ConditionalOnClass
- @Conditional
- 可以接收 Condition数组
- Condition有一个matches方法,返回true就注册,否则就不注册
- springboot 扩展 @Conditional
- ConditionOnxxx�
spring-autoconfigure-metadata 批量自动装配条件配置
手写starters
功能
涉及相关组件的jar包依赖
- 自动实现bean的装配
自动声明加载application.properties文件属性配置
命名规范
官方
- spring-boot-starter-xxx
- 自定义
- xxx-spring-boot-starter
服务治理
Dubbo
- 一个rpc框架
- 提供了服务治理功能
- 注册
- 监控
- 路由
- 容错
�
