SpringCloudAlibaba学习
核心SpringBoot
- starter组件,提供开箱即用的组件。
- 自动装配,自动根据上下文完成Bean的自动装配
- Actuator,SpringBoot 的监控。
- SpringBootCLI,基于命令行工具快速构建SpringBoot。
springBoot核心思想:
约定优于配置
主要体现
- Maven目录
- Spring boot默认的配置文件,及配置文件中配置属性的约定
- 对于Spring MVC的依赖,内置Tomcat服务器
- 对Starter组件自动装配
Spring Ioc/DI
IOC
- 控制反转,将对象的管理,交给Spring容器来处理
DI
- 依赖注入指的是在IOC容器运行过程中,把对象动态的注入到需要使用的地方。
- 实现方式一般有3中,接口注入,构造注入、setter方法注入。
声明下bean的声明周期
- Bena的生命周期 (不加后置处理器 5步 否则7步 初始化 前后 要 把bean实例传递给后置处理器)
- 通过构造器创建bean实例(无参构造方法)
- 为bean的属性设置值和对其他的bean引用
- 调用bean的初始化方法(需要进行配置)
- bean可以使用了
- 销毁(需要配置)
<bean id = "user" class="app.User" init-method="initMethod" destroy-method="destroyMethod">
<property name="user" value="用户" ></property>
</bean>
String path = "bean.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(path);
User user = applicationContext.getBean("user",User.class);
System.out.println("实例化 bean ");
System.out.println(user);
SpringBoot 自动装配
EnableAutoConfiguration
Spring boot 自动装配是依赖于Starter来实现的。
启动Spring Boot 需要EnableAutoConfiguration注解,SpringBoot 的EnableAutoConfiguration直接包含在了SpringBootApplication中;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
进入 EnableAutoConfiguration
可以发现它包含了AutoConfigurationPackage注解
AutoConfigurationPackage 注解的主要作用是把使用了该注解所在的包及子包下的所有组件都扫描到SpringIoc容器中。
AutoConfigurationImportSelector
AutoConfigurationImportSelector 实现了ImportSelector,规定了一个selectImport返回了一个数组,他可以把这个数组中包含的所有类的class
自动装配原理
- 自动装配通过扫描约定的目录下的文件进行解析,然后把对应的configuration诶值通过ImportSelector进行导入,完成自动装配。
- AutoConfigurationImportSelector的selectImprts方法,它是ImportSelector接口的实现主要完成两件事
- 加载配置文件中的条件元组件,
- 收集所有符合条件的配置类,完成自动装配
1. 记载EnableAutoConfiguration上的exclude,excludeName
2. 加载配置文件上的所有需要自动装配的组件
3. 去重
4. 根据EnableAutoConfiguration上的exclude 在次过滤不需要装配的
5. 发送广播事件
6. 返回通过多成过滤和判断的配置类集合。
自动装配的核心过程
- 通过Import注解实现配置类的导入。
- 通过AutoConfigurationImportSelector类实现批量配置类的导入
- 通过Spring的SpringFactoriesLoader机制,扫描classpath路径下的META-INF/spring.factories,读取需要装配的配置类。
- 通过条件筛选的方式,把不需要装配的配置类剔除,完成自动装配。
条件装配@Condational
- conditional是配合自动装配使用的,是对自动装配做条件限制,和Configuration和Bean配合使用。