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
o