Spring Bean的解析 RuntimeBeanReference
阿新 • • 發佈:2019-01-25
在Spring中,Bean的解析階段,會把xml配製中的<bean>標籤解析成Spring中的BeanDefinition對像,我們知道一個bean可能需要依賴其他的bean,在XML配置中可以表現為
<beanclass="foo.bar.xxx">
<propertyname="referBeanName"ref="otherBeanName"/>
</bean>
在Spring的解析段,其實容器中是沒有依賴的Bean的例項的因此,那麼這是這個被依賴的Bean如何在BeanDefinition中表示呢?
答案就是RuntimeBeanReference,在解析到依賴的Bean的時侯,解析器會依據依賴bean的name建立一個RuntimeBeanReference對像,將這個對像放入BeanDefinition的MutablePropertyValues中。
例如:上例中的依賴bean會被解析成
//我們知道foo.bar.xxx 被解析為一個beanDefiniton,假設為xxxBeanDefinition
reference =newRuntimeBeanReference("otherBeanName");
xxxBeanDefinition.getPropertyValues().addPropertyValue("referBeanName", reference);
在建立Bean時,需要將依賴解析成真正的在Spring容器中存在的Bean。這是在getBean時由AbstractAutowireCapableBeanFactory在applyPropertyValues方法中通過BeanDefinitionValueResolver來實現的。BeanDefinitionValueResolver將真正的依賴bean和referBeanName關聯起來。