目录
Spring注解的解析原理
- 使用@Component等注解配置完毕后,要配置组件扫描才能使注解生效
-
xml配置组件扫描
-
<context:component-scan base-package="com.example"/>
- 在往期文章中:Spring整合第三方框架_保持敬畏的博客-CSDN博客 ,我们了解同一标签中不同命名空间对应不同的解析器,对于上述中component-scan命名空间对应的解析器
-
ContextNamespaceHandler类
-
ComponentScanBeanDefinitionParser类
-
- doScan方法
- 在该方法中,对于添加了@Component注解及其衍生注解的类,为其创建BeanDefinition对象放入到BeanDefinitionMap中,然后就是经历SpringBean的生命周期,最后存入单例池中,被Spring容器管理。xml配置组件扫描该方法没有使用后处理器
-
-
-
注解方式配置组件扫描
-
@ComponentScan({"com.example"}) public class SpringConfig { }
-
这中情况源码太复杂了,翻不下去了,大概是将BeanDefinitionRegisterPostProcessor注入到容器当中,再调用其中的doScan方法进行BeanDefinition注册。
-
-
原理图
- xml方式:通过自定义标签的方式,通过ComponentScanBeanDefinitionParser解析最终通过调用Scanner的doScan方法进行beanDefiniton注册
- 注解方式:通过ConfigurationClassPostProcessor最终内部调用Scanner的doScan方法进行beanDefiniton注册
- 两种方式入口不同,但是最终核心代码解析component时代码是一样的。
-
yysy,没有搞太明白,真的复杂,欢迎大佬留言解惑
-