- 启动类注解 @SpringBootApplication - 复合注解,其中包含 @EnableAutoConfiguration
- @EnableAutoConfiguration - 复合注解 开启自动配置 ,
其中包含 @AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class})- @AutoConfigurationPackage 其中 @Import({Registrar.class}) ,而 Registrar 获取扫描包路径
- @Import({AutoConfigurationImportSelector.class}) 类中 selectImports方法,将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中。并且加载类路径 META-INF/spring.factories,通过Properties加载资源. 在其中获取EnableAutoConfiguration指定的值-就是全路径如:com.xx.xx.xxAutoConfiguration.
- 自动配置类中有注解,@Configuration @EnableConfigurationProperties({MybatisProperties.class})
- @ConditionalOnXX代表自动装配条件,如 @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) 则是,这两个类加载后,才进行自动装配。
- @EnableConfigurationProperties({MybatisProperties.class}) ,用于配置文件中的指定键值对映射到一个java实体类上。所有。就可以在 yaml中直接配置属性值
图解:
简单实现- 自定义自动装配
@ConfigurationProperties(prefix = "spring.userdef.model")
public class UserDefProperties {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
@Slf4j
@EnableConfigurationProperties(value = UserDefProperties.class)
public class UserDefAutoConfiguration {
@Autowired
private UserDefProperties userDefProperties;
@Bean
public User user(){
log.info("自定义自动装配UserDefAutoConfiguration.....");
User user = new User();
user.setUserName(userDefProperties.getUserName());
return user;
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.config.UserDefAutoConfiguration
spring:
userdef:
model:
user-name: hexiaoshu
@Resource
private User user;
@GetMapping("/test")
public Result test(){
return Result.ok(user.getUserName());
}