@SpringBootApplication

1. @SpringBootConfiguration

继承于@Configuration,本身只是说明这是一个SpringBoot项目的配置类,功能与@Configuration一样,使得Spring容器知道需要跟处理@Configuration注解的类一样处理这个类。

2. @ComponentScan

进行当前包下扫描, 对应的bean对象注册到Spring容器

3. @EnableAutoConfiguration 自动装配

  1. @Target({ElementType.TYPE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Inherited
  5. @AutoConfigurationPackage
  6. @Import({AutoConfigurationImportSelector.class})
  7. public @interface EnableAutoConfiguration {
  8. String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
  9. Class<?>[] exclude() default {};
  10. String[] excludeName() default {};
  11. }

导入配置类,选择器,注册器

  • @AutoConfigurationPackage

扫描包名称,交给spring容器管理

  • 内部导入@Import(AutoConfigurationImportSelector.class)

实现了ImportSelector接口,从缓存中取出(解析META-INF/spring.factories配置文件),
1.去重2.删除exclusion的类3.过滤
一系列操作后将String数组导入到BeanDefinitionMap中, 加载并自动装配所有配置类

@Import(Spring 提供的一个注解,可以导入配置类或者Bean到当前类中)

yml/properties配置文件加载

SpringApplication.run方法中,有加载环境配置到内存

SpringBoot自带自动配置

SpringBoot整合Redis配置解析

  1. @Configuration
  2. @ConditionalOnClass(RedisOperations.class)// 有RedisOperations才起作用(spring-data-redis)
  3. @EnableConfigurationProperties(RedisProperties.class)//加载配置
  4. @Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
  5. public class RedisAutoConfiguration {
  6. @Bean
  7. @ConditionalOnMissingBean(name = "redisTemplate")//如果spring容器没有这个名称的实例则加载
  8. public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
  9. throws UnknownHostException {
  10. RedisTemplate<Object, Object> template = new RedisTemplate<>();
  11. template.setConnectionFactory(redisConnectionFactory);
  12. return template;
  13. }
  14. @Bean
  15. @ConditionalOnMissingBean//如果spring容器没有这个类型的实例则加载
  16. public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
  17. throws UnknownHostException {
  18. StringRedisTemplate template = new StringRedisTemplate();
  19. template.setConnectionFactory(redisConnectionFactory);
  20. return template;
  21. }
  22. }

自定义自动配置

Mybatis主动整合到SpringBoot

  1. <dependency>
  2. <groupId>org.mybatis.spring.boot</groupId>
  3. <artifactId>mybatis-spring-boot-starter</artifactId>
  4. <version>1.3.2</version>
  5. </dependency>

里面依赖了

<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-autoconfigure</artifactId>
</dependency>

image.png

@Configuration
// 必须有如下两个类
@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
// 必须有数据源
@ConditionalOnBean(DataSource.class)
@EnableConfigurationProperties(MybatisProperties.class)
// 要在数据源配置之后
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisAutoConfiguration {

}

个人自定义Starter

非官方定义命名: 模块-spring-boot-starter

@Configuration
@ConditionalOnClass(Wrap.class)// Wrap
@EnableConfigurationProperties(WarpProperties.class)//加载配置
// 下面配置Bean (按顺序配置)