spring xml配置文件bean的解析定义

本文详细介绍了Spring框架中XML配置文件解析的过程,包括如何通过NamespaceHandler、BeanDefinitionParser和BeanDefinitionDecorator接口实现bean的定义与装饰,以及如何注册自定义的NamespaceHandler实现类。

spring为解析xml创建bean提供了一种非常解藕的方式。

整体架构面向接口编程,AbstractApplicationContext的refresh方法被调用时,在刷新BeanFactory的时候会解析配置文件。框架提供了:

接口 org.springframework.beans.factory.xml.NamespaceHandler;

抽象实现类 org.springframework.beans.factory.xml.NamespaceHandlerSupport;

以及

org.springframework.beans.factory.xml.BeanDefinitionParser;

org.springframework.beans.factory.xml.BeanDefinitionDecorator;

接口去完成xml解析的解藕。

用法:

1,创建抽象类NamespaceHandlerSupport的实现类。子类实现init方法,方法内部调用NamespaceHandlerSupport抽象父类的注册方法: 

  registerBeanDefinitionParser(String elementName, BeanDefinitionParser parser);

  registerBeanDefinitionDecorator(String elementName, BeanDefinitionDecorator dec);

    registerBeanDefinitionDecoratorForAttribute(String attrName, BeanDefinitionDecorator dec);

2, 从以上方法可以看出我们还需要提供BeanDefinitionParser、BeanDefinitionDecorator接口的实现。这二个接口是解析xml的具体实现描述,因此需要提供这些接口的实现类。

BeanDefinitionParser接口提供方法:

  BeanDefinition parse(Element element, ParserContext parserContext);

生成非代理bean时,采用这个解析器接口。

BeanDefinitionDecorator接口提供方法:

  BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder definition, ParserContext parserContext);

生成代理bean时,采用这个解析器接口。

接口实现主要做的事情:往bean元信息对象添加属性。bean元信息,spring提供 GenericBeanDefinition、ChildBeanDefinition、RootBeanDefinition三个类去描述bean的信息。属性值由xml配置文件中获取。

另外,spring提供了BeanDefinitionBuilder类,方便创建上诉三个不同bean定义对象。

3,按照上面的步骤代码层面已经实现了,还存在一个问题,怎么让spring框架去找到NamespaceHandler的实现类呢?

spring提供了DefaultNamespaceHandlerResolver,这个类会默认加载所有依赖jar里面的META-INF/spring.handlers属性文件。

此文件配置内容为健值对形式。键为xml配置文件中根节点的 “xsi:schemaLocation” 属性的值。值为NamespaceHandler实现类的全路径名。

因此需要我们按照这种形式创建文件。

 

转载于:https://www.cnblogs.com/hf-china/p/10241029.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值