1. 程式人生 > >Spring Bean的解析 RuntimeBeanReference

Spring Bean的解析 RuntimeBeanReference

在Spring中,Bean的解析階段,會把xml配製中的<bean>標籤解析成Spring中的BeanDefinition對像,我們知道一個bean可能需要依賴其他的bean,在XML配置中可以表現為

  1. <beanclass="foo.bar.xxx">
  2. <propertyname="referBeanName"ref="otherBeanName"/>
  3. </bean>

在Spring的解析段,其實容器中是沒有依賴的Bean的例項的因此,那麼這是這個被依賴的Bean如何在BeanDefinition中表示呢?

答案就是RuntimeBeanReference,在解析到依賴的Bean的時侯,解析器會依據依賴bean的name建立一個RuntimeBeanReference對像,將這個對像放入BeanDefinition的MutablePropertyValues中。

例如:上例中的依賴bean會被解析成

  1. //我們知道foo.bar.xxx 被解析為一個beanDefiniton,假設為xxxBeanDefinition
  2. reference =newRuntimeBeanReference("otherBeanName");
  3. xxxBeanDefinition.getPropertyValues().addPropertyValue("referBeanName", reference);

在建立Bean時,需要將依賴解析成真正的在Spring容器中存在的Bean。這是在getBean時由AbstractAutowireCapableBeanFactory在applyPropertyValues方法中通過BeanDefinitionValueResolver來實現的。BeanDefinitionValueResolver將真正的依賴bean和referBeanName關聯起來。