@SpringBootApplication
1. @SpringBootConfiguration
继承于@Configuration,本身只是说明这是一个SpringBoot项目的配置类,功能与@Configuration一样,使得Spring容器知道需要跟处理@Configuration注解的类一样处理这个类。
2. @ComponentScan
进行当前包下扫描, 对应的bean对象注册到Spring容器
3. @EnableAutoConfiguration 自动装配
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class})public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";Class<?>[] exclude() default {};String[] excludeName() default {};}
导入配置类,选择器,注册器
- @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配置解析
@Configuration@ConditionalOnClass(RedisOperations.class)// 有RedisOperations才起作用(spring-data-redis)@EnableConfigurationProperties(RedisProperties.class)//加载配置@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })public class RedisAutoConfiguration {@Bean@ConditionalOnMissingBean(name = "redisTemplate")//如果spring容器没有这个名称的实例则加载public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);return template;}@Bean@ConditionalOnMissingBean//如果spring容器没有这个类型的实例则加载public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}}
自定义自动配置
Mybatis主动整合到SpringBoot
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency>
里面依赖了
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-autoconfigure</artifactId>
</dependency>

@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 (按顺序配置)
