Spring注解注入

对于注解注入的bean,需要在xml中配置

   
   

我们看下compoent-scan的注释


image.png

可以看出来component-scan不仅能完成bean定义,还可以自动注入bean,所以只要配置一个即可。
Spring在DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions中解析bean时,对于注解注入的bean采用parseCustomElement方式解析。


image.png

委托给BeanDefinitionParserDelegate来解析。
image.png

NamespaceHandler通过子类NamespaceHandlerSupport完成解析。


image.png

不同的标签由不同的BeanDefinitionParser来解析。对于component-scan来说,是由ComponentScanBeanDefinitionParser执行。
image.png

(1)首先获取context:component-scan 配置的属性base-package的值,然后放到数组。
(2)创建扫描对应包下的class和jar文件的对象ClassPathBeanDefinitionScanner ,由这个类来实现扫描包下的class和jar文件并把注解的Bean包装成BeanDefinition。
(3)BeanDefinition注册到Bean工厂。
以下为具体解析和注册过程:
image.png

1、首先找到待注入的bean

image.png

(1)先把base-package下的路径进行转换,并扫描package下的jar和class并封装成resource
(2)过滤包下的class
(3)包装beanDefinition,放到队列里

2、把beanDefinition包装成BeanDefinitionHolder

3、注册bean,由DefalutListableBeanDefnitionRegistry来完成

image.png

你可能感兴趣的:(Spring注解注入)