SpringBoot自动装配(二)
上文写到,最后会配置一个监听器,用于记录自动装配的条件评估详情。现在我们自定义一个监听器,去测试下。首先需要实现一个AutoConfigurationImportListener接口。
public class DefaultAutoConfigurationImportListener implements AutoConfigurationImportListener {
@Override
public void onAutoConfigurationImportEvent(AutoConfigurationImportEvent event) {
//获取当前classLoader
ClassLoader classLoader = event.getClass().getClassLoader();
//实际自动装配的配置类
List<String> candidateConfigurations = event.getCandidateConfigurations();
//排除的自动装配名单
Set<String> exclusions = event.getExclusions();
System.out.printf("实际装配 为:%s,排除的自动装配为:%s\t\n", candidateConfigurations.size(), exclusions.size());
System.out.println("------------实际装配类----------");
candidateConfigurations.forEach(System.out::println);
System.out.println("------------排除装配类----------");
exclusions.forEach(System.out::println);
}
}
然后,在项目resources下定义一个META-INF/spring.factories文件,前面已经说过,
SpringFactoriesLoader会将一个或多个META-INF/spring.factories进行读取。
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
com.yyw.listener.DefaultAutoConfigurationImportListener
修改启动类
@EnableAutoConfiguration(exclude = RedisAutoConfiguration.class)
public class BootStrapApplication {
public static void main(String[] args) {
SpringApplication.run(BootStrapApplication.class, args);
}
}
执行代码,观察结果。
实际装配 为:22,排除的自动装配为:1
------------实际装配类----------
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAut

本文深入探讨SpringBoot自动装配的过程,从实现AutoConfigurationImportListener接口开始,通过创建自定义监听器并配置spring.factories文件,分析启动类执行与结果。文章提出疑问并解答关于默认配置与自定义配置共存的原因,进一步研究AutoConfigurationImportSelector的实现,包括DeferredImportSelector接口、getImportGroup()方法、AutoConfigurationGroup和AutoConfigurationSorter的相关方法,详述自动装配类的顺序确定过程。
最低0.47元/天 解锁文章
995

被折叠的 条评论
为什么被折叠?



