一、SpringBoot自动配置原理
1.定义
他是基于你依赖的Jar包,对SpringBoot应用进行自动配置,为SpringBoot的开箱即用提供的基础支撑
2.SpringBoot自动装配的实例
Redis的自动配置
1.引入redis的相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置Redis的服务器
spring:
redis:
database: 0
host: 127.0.0.1
port: 6379
3.直接使用
public class Spring {
@Autowired
private RedisTemplate<Object,Object> redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
}
3.SpringBoot的启动流程
一、SpringBoot启动的时候,会构造一个SpringApplication的实例,构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事:
1、把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数.
2、判断是否是web程序,并设置到webEnvironment的boolean属性中.
3、创建并初始化ApplicationInitializer,设置到initializers属性中 。
4、创建并初始化ApplicationListener,设置到listeners属性中 。
5、初始化主类mainApplicatioClass。
二、SpringApplication构造完成之后调用run方法,启动SpringApplication,run方法执行的时候会做以下几件事:
1、构造一个StopWatch计时器,用来记录SpringBoot的启动时间 。
2、初始化监听器,获取SpringApplicationRunListeners并启动监听,用于监听run方法的执行。
3、创建并初始化ApplicationArguments,获取run方法传递的args参数。
4、创建并初始化ConfigurableEnvironment(环境配置)。封装main方法的参数,初始化参数,写入到 Environment中,发布 ApplicationEnvironmentPreparedEvent(环境事件),做一些绑定后返回Environment。
5、打印banner和版本。
6、构造Spring容器(ApplicationContext)上下文。先填充Environment环境和设置的参数,如果application有设置beanNameGenerator(bean)、resourceLoader(加载器)就将其注入到上下文中。调用初始化的切面,发布ApplicationContextInitializedEvent(上下文初始化)事件。
7、SpringApplicationRunListeners发布finish事件。
8、StopWatch计时器停止计时,日志打印总共启动的时间。
9、发布SpringBoot程序已启动事件(started())
10、调用ApplicationRunner和CommandLineRunner
11、最后发布就绪事件ApplicationReadyEvent,标志着SpringBoot可以处理就收的请求了(running())
4.@Import
作用:他的作用是提供了一种显示地从其他类加载配置类的方式,一共有3种
1.普通类
2.接口ImportSelector的实现类
3.接口ImportBeanDefinitionRegistrar的实现类
个人理解:
首先自动配置需要的核心在于@EableAutoConfigration,而他又依赖于@Import注解,该注解可以通过放实现ImportRegister接口的实现类,将相关或者需要的bean注入容器中,而该实现类需要到spring.factories里面去找对应的自动配置类,而每个配置类中都@Conditonal,只有在满足@Conditonal中指定的所有条件后,才可以向容器中注入组件。这样即可完成springBoot的自动配置