喀什地区建设局网站,互联网技术培训学校,网站开发与调试实验报告,博客平台Import注解 Enable* 底层依赖于 Import 注解导入一些类#xff0c;使用 Import 导入的类会被 Spring 加载到 IOC 容器中Import 提供了4种用法#xff1a; 1.导入Bean2.导入配置类3.导入ImportSelector实现类#xff1b;一般用于加载配置文件中的类4.导入ImportBeanDefinitio… Import注解 Enable* 底层依赖于 Import 注解导入一些类使用 Import 导入的类会被 Spring 加载到 IOC 容器中Import 提供了4种用法 1.导入Bean2.导入配置类3.导入ImportSelector实现类一般用于加载配置文件中的类4.导入ImportBeanDefinitionRegistrar实现类 EnableAutoConfiguration注解 可以看看Spring是如何使用Import 注解的进入引导类上的SpringBootApplication 注解可以看到其注解依赖 EnableAutoConfiguration 注解进入 EnableAutoConfiguration 注解可以看到它使用了 Import 注解导入了 AutoConfigurationImportSelector 这个自动配置的 Selector 进入 AutoConfigurationImportSelector 之后可以找到 selectImports 方法根据上文所述这个方法返回了一个 String 类型的数组数组中定义了很多需要被加载的类 进入加载方法可以看到有一个getCandidateConfigurations方法会返回一个名为 configurations 的 List 集合在下面的代码中根据条件筛选了这个集合并放入创建的 AutoConfigurationEntry 中返回 进入 getCandidateConfigurations 可以看到他通过 SpringFactoriesLoader 加载了一些配置信息并返回了一个名为 configurations 的 List 集合下面的断言表示如果这个集合为空的那么就会出现异常大概意思为“不能自动配置一个 claesses在 META-INF 目录下的 spring.factories 文件下”如果没有定义 spring.factories 这个文件那么他就加载不到加载不到就会出现断言 接下来在 External Libraries 中找到 org.springframework.boot:spring-boot-autoconfigure:2.6.1 下的spring-boot-autoconfigure-2.6.1.jar - META-INF - spring.factories 并进入 可以看到这个配置文件中有一个 key 为 org.springframework.boot.autoconfigure.EnableAutoConfiguration 的配置其中配置了许多的 Configuration那么这些 Configuration 将来都会被加载当然这些 Configuration 能否加载出来还得看他们的条件是否满足比如可以找到前面讲到的 RedisRedis 在当前配置文件中有一个 RedisAutoConfiguration 进入 RedisAutoConfiguration 可以看到其中有一个 ConditionalOnClass 条件注解当这个注解里的条件被满足时这个类中的 Bean 才会被创建 当然不止这一个会有条件注解再随便挑一个进去看看在 KafkaAutoConfiguration 中同样定义了条件注解当环境中存在 KafkaProperties 时这个类中的 Bean 才会被加载 小结EnableAutoConfiguration 注解内部使用 Import(AutoconfigurationImportSelector.class) 来加载配置类配置文件位置META-INF/spring.factories该配置文件中定义了大量的配置类当 SpringBoot 应用启动时会自动加载这些配置类初始化 Bean并不是所有的 Bean 都会被初始化在配置类中使用 Condition 来加载满足条件的 Bean