javascript
SpringBoot注解自动扫描-底层实现
分析上文Spring Boot快速入門
@SpringBootApplication public class HelloWorldApplication {public static void main(String[] args) {//Spring應用啟動起來SpringApplication.run(HelloWorldApplication.class,args);} }
@SpringBootConfiguration:Spring Boot的配置類,我們點擊進去查看
我們看到28行的注解
@EnableAutoConfiguration:開啟自動配置的功能
以前我們使用三大框架時,很多東西需要自己在xml中配置,但現在Spring Boot幫我們自動配置-》就是該注解實現的
我們ctrl+右鍵點擊該注解查看
@Import({AutoConfigurationImportSelector.class})
@Import:Spring的底層注解,向容器中導入一個組件
@AutoConfigurationPackage:添加該注解的類所在的package 作為 自動配置package 進行管理
點擊@AutoConfigurationPackage注解進去查看源碼
點擊21行的Registrar.class
在該處打上斷點,在debug模式下進行源碼追蹤
選中(String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0])-》右鍵-》Evaluate expression-》Evaluate
我們發現將@SpringBootApplication標注的類的所在包及其下面所有的子包的所有組件掃描到了Spring容器中,所以我們必須將Controller、service、dao等放到主配置類所在包的子包中
@Import({AutoConfigurationImportSelector.class})
AutoConfigurationImportSelector.:導入哪些組件的選擇器,將所有需要導入的組件以全類名的方式返回;這些組件就會被添加到容器中;
斷點追蹤
有了上面的自動配置類,我們就不需要再手動編寫;那么自動配置類是從哪里掃描到這些自動配置類呢
SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader())
我們點擊loadFactoryNames查看進一步查看源碼實現方式
springboot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導入到容器中,自動配置類就開始生效,幫我們進行配置工作
打開我們導入的包
查看web自動配置類點擊查看源碼
我們能夠看到我們在SpringMVC中配置的很多功能,比如視圖解析器(如上圖所示)
J2EE的整體解決方案和自動配置都在spring-boot-autoconfigure-2.3.6.RELEASE.jar中
(比如我們熟悉的aop:事務,cache:緩存,dao:持久層 等等
這就是約定大于配置
總結
以上是生活随笔為你收集整理的SpringBoot注解自动扫描-底层实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot-场景启动器
- 下一篇: gradle idea java ssm