zoukankan      html  css  js  c++  java
  • spring xml配置文件bean的解析定义

    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实现类的全路径名。

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

  • 相关阅读:
    HorizontalScrollView水平滚动控件的使用
    ScrollView垂直滚动控件的使用
    RatingBar评分控件的使用
    ProgressBar进度条的使用
    AnalogClock和DigitalClock时间和日期控件
    DatePicker输入日期控件的使用
    ImageView从网络上获取图像
    CentOS 7.3 安装配置Samba服务器
    python元组内置函数
    Python元组
  • 原文地址:https://www.cnblogs.com/hf-china/p/10241029.html
Copyright © 2011-2022 走看看