海外 網(wǎng)站 推廣百度一下百度知道
目錄
Spring注解的解析原理
xml配置組件掃描
注解方式配置組件掃描
原理圖
yysy,沒有搞太明白,真的復(fù)雜,歡迎大佬留言解惑
Spring注解的解析原理
- 使用@Component等注解配置完畢后,要配置組件掃描才能使注解生效
-
xml配置組件掃描
-
<context:component-scan base-package="com.example"/>
- 在往期文章中:Spring整合第三方框架_保持敬畏的博客-CSDN博客?,我們了解同一標(biāo)簽中不同命名空間對應(yīng)不同的解析器,對于上述中component-scan命名空間對應(yīng)的解析器
-
ContextNamespaceHandler類
-
ComponentScanBeanDefinitionParser類
- ??????????????
- doScan方法
- 在該方法中,對于添加了@Component注解及其衍生注解的類,為其創(chuàng)建BeanDefinition對象放入到BeanDefinitionMap中,然后就是經(jīng)歷SpringBean的生命周期,最后存入單例池中,被Spring容器管理。xml配置組件掃描該方法沒有使用后處理器
- ??????????????
-
-
注解方式配置組件掃描
-
@ComponentScan({"com.example"}) public class SpringConfig {}
-
這中情況源碼太復(fù)雜了,翻不下去了,大概是將BeanDefinitionRegisterPostProcessor注入到容器當(dāng)中,再調(diào)用其中的doScan方法進行BeanDefinition注冊。
-
-
原理圖
- xml方式:通過自定義標(biāo)簽的方式,通過ComponentScanBeanDefinitionParser解析最終通過調(diào)用Scanner的doScan方法進行beanDefiniton注冊
- 注解方式:通過ConfigurationClassPostProcessor最終內(nèi)部調(diào)用Scanner的doScan方法進行beanDefiniton注冊
- 兩種方式入口不同,但是最終核心代碼解析component時代碼是一樣的。
-
yysy,沒有搞太明白,真的復(fù)雜,歡迎大佬留言解惑
-