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