動力節(jié)點王鶴SpringBoot3第三章
3 自動配置
啟用autoconfigure(自動配置)佛掖,框架嘗試猜測和Bean要使用的Bean,從類路徑中查找xxx.jar,創(chuàng)建這個jar中某些需要的Bean屈雄。例如我們使用MyBatis訪問數(shù)據(jù), 從我們項目的類路徑中尋找mybatis.jar, 進一步創(chuàng)建SqlSessionFactory, 還需要DataSource數(shù)據(jù)源對象,嘗試連接數(shù)據(jù)。這些工作交給XXXAutoConfiguration類吓笙,這些就是自動配置類己儒。在spring-boot-autoconfigure-3.0.2.jar定義了很多的XXXAutoConfiguration類崎岂。第三方框架的starter里面包含了自己XXXAutoConfiguration
第三方框架MyBatis,mybatis-spring-boot-starter的MyBatisAutoConfiguration自動配置類
自動配置的注解@EnableAutoConfiguration(通常由@SpringBootApplication注解帶入)所在的包闪湾,具有特殊的含義冲甘,是Spring Boot中的默認包,默認包是掃描包的起點(根包)途样。@Controller ,@Service, @Repository ,@Component, @Configuration放在根包以及子包中就會被掃描到江醇。
3.1 @Import
@EnableAutoConfiguration源碼上面的@Import(AutoConfigurationImportSelector.class)
@Import:導(dǎo)入類,注冊為Bean何暇。@Import相當于xml文件中的<import>陶夜。 可以導(dǎo)入@Configuration的類,實現(xiàn)了ImportSelector接口的類裆站,ImportBeanDefinitionRegistrar接口的類条辟。
ImportSelector接口在Spring Boot使用的比較多
public interfaceImportSelector {
//AnnotationMetadata 被@Import注釋的類注解信息
//導(dǎo)入配置類全限定名稱?String[] selectImports(AnnotationMetadata importingClassMetadata);
3.2 AutoConfigurationImportSelector
AutoConfigurationImportSelector間接實現(xiàn)了ImportSelector接口,導(dǎo)入自動配置類
自動配置從jar的指定文件讀取要加載的配置類列表
位置:META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
Spring Boot 之前的版本(2.7)讀取spring.factories文件遏插。 保留spring.factories為了向后兼容.
3.3 @AutoConfiguration注解
新的注解@AutoConfiguration捂贿,用在自動配置類的上面。相當于增強的@Configuration胳嘲,專注自動配置類厂僧。
@AutoConfiguration還支持通過after、afterNames了牛、before和benameames屬性進行自動配置排序颜屠,決定多個自動配置類執(zhí)行先后順序。