1. meta元素的使用
在解析元数据的分析之前,我们先回顾一下 meta属性的使用:
<bean id="car" class="test.CarFactoryBean"> <property name="carInfo" value="超级跑车,400,2000000"/> <meta key = "key" value = "values"> </bean>
这段代码并不会体现在 CarFactoryBean 的属性当中,而是一个额外的声明,当需要里面的属性时,可以通过BeanDefinition的getAttribute(key);方法获取,
对meta属性解析的代码如下:
beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java
1 public void parseMetaElements(Element ele, 2 BeanMetadataAttributeAccessor attributeAccessor) { 3 // 获取当前节点下的所有子元素 4 NodeList nl = ele.getChildNodes(); 5 for (int i = 0; i < nl.getLength(); i++) { 6 Node node = nl.item(i); 7 // 提取meta 8 if (isCandidateElement(node) && nodeNameEquals(node, META_ELEMENT)) { 9 Element metaElement = (Element) node; 10 String key = metaElement.getAttribute(KEY_ATTRIBUTE); 11 String value = metaElement.getAttribute(VALUE_ATTRIBUTE); 12 // 使用 key,value 构造 BeanMetadataAttribute 13 BeanMetadataAttribute attribute = new BeanMetadataAttribute(key, value); 14 attribute.setSource(extractSource(metaElement)); 15 // 记录信息 16 attributeAccessor.addMetadataAttribute(attribute); 17 } 18 } 19 }