赞
踩
SpringBoot自动配置,英文是Auto-Configuration:
- 它是指基于你引入的依赖jar包,对SpringBoot应用进行自动配置
- 它为SpringBoot框架的"开箱即用"提供了基础支撑
注意:
“自动配置” 和 “自动装配” 概念不要混淆:
1.自动配置,是Auto-Configuration,针对的是SpringBoot中的配置类;
2.自动装配,是Autowire,针对的是Spring中的依赖注入。
术语:
“配置类”,英文是Configuration Class:
- 广义的“配置类”:被注解@Component直接或间接修饰的某个类,即我们常说的Spring组件,其中包括了@Configuration类
- 狭义的“配置类”:特指被@Configuration所修饰的类,又称为@Configuration类
1、引入依赖
<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
password: 123456
3、直接使用RedisTemplate 或 StringRedisTemplate 等Bean对象
@Autowired private RedisTemplate<Object,Object> redisTemplate; @Autowired private StringRedisTemplate stringRedisTemplate;,
整个过程中,我们除了通过Maven引入一个starter外,其他什么也没有做,但是SpringBoot就自动完成了Redis的配置,将相关的Bean对象注册到IoC容器中了。
自动配置作为SpringBoo启动的一部分,我们有必要从全局的角度去理解它。
SpringBoot启动流程的简化版代码:
- public static void run(Class<?> primaryClass) {
- //1.创建一个ApplicationContext实例,即我们常说的IoC容器
- ApplicationContext context = createApplicationContext();
- //2.将主类(primaryClass)注册到IoC容器中(简单但重要的第一步)
- loadSourceClass(context,primaryClass);
- //3.递归加载并处理所有的配置类
- processConfigurationClasses(context);
- //4.实例化所有的单例Bean(Singleton Bean)
- instantiateSingletonBean(context);
- //5.如果是web应用,则启动web服务器(例如Tomcat)
- startWebServer(context);
- }
SpringBoot加载配置类流程的简化版:
1、@Component注解
- 它的作用是对指定的package进行扫描,找到其中符合条件的类,默认是搜索被注解@Component修饰的配置类
- 通过属性basePackages 或 basePackagesClasses,来指定要进行扫描的package
-如果未指定package,则默认扫描当前@ComponentScan所修饰的类所在的package
2、@Import注解
- 它的作用是提供一种显示地从其他地方(第三方jar包)加载配置类的方式,这样可以避免使用性能较差的扫描组件(Component Scan)
- 支持导入:
普通类(这里的“普通”,是相对于随后的两个接口而言的);
接口ImportSelector的实现类;
接口ImportBeanDefinitioneRegistrar的实现类。
使用注解@Import,导入选择器 ImportSelector,非常适合用来实现自动配置。
1、结论:SpringBoot使用注解@Import,导入一个ImportSelector,从而实现了自动配置的功能。
2、注解@SpringBootSpplication结构图:
3、如何实现类AutoConfigurationImportSelector
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。