如果NamespaceHandler遇到已映射到特定 bean 定义解析器(在本例中为日期格式)的类型的 XML 元素,则使用 BeanDefinitionParser。换句话说,BeanDefinitionParser 负责解析模式中定义的一个不同的顶级 XML 元素。在解析器中,我们可以访问 XML 元素(因此也可以访问其子元素),以便可以解析自定义 XML 内容,如以下示例所示:
packageorg.springframework.samples.xml;importorg.springframework.beans.factory.support.BeanDefinitionBuilder;importorg.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;importorg.springframework.util.StringUtils;importorg.w3c.dom.Element;importjava.text.SimpleDateFormat;publicclassSimpleDateFormatBeanDefinitionParserextendsAbstractSingleBeanDefinitionParser { protectedClassgetBeanClass(Element element) {returnSimpleDateFormat.class; }protectedvoiddoParse(Element element,BeanDefinitionBuilder bean) {// this will never be null since the schema explicitly requires that a value be suppliedString pattern =element.getAttribute("pattern");bean.addConstructorArgValue(pattern);// this however is an optional propertyString lenient =element.getAttribute("lenient");if (StringUtils.hasText(lenient)) {bean.addPropertyValue("lenient",Boolean.valueOf(lenient)); } }}