zoukankan      html  css  js  c++  java
  • Spring容器技术内幕之BeanDefinition类介绍

    引言

    org.springframework.beans.factory.config.BeanDefinition是配置文件< bean >元素标签在容器中地内部表示。< bean >元素标签拥有class、scope、lazy-init等配置属性,BeanDefinition则提供了相应地beanClass、scope、lazyInit类属性,BeanDefinition就像< bean >中镜中人,二者是一一对应地。

    实现类

    RottBeanDefinition是最常用地实现类,它对应一般性地< bean > 元素标签。我们知道,在配置文件中可以定义父< bean >和子< bean >,父< bean >用RootBeanDefiniton表示,子< bean >用ChildBeanDefinition表示,而没有父< bean >的< bean >则用RootBeanDefinition表示。AbstractBeanDefintion对二者共同的类信息进行抽象。
    Spring配置文件通过BeanDefintion将配置文件中的< bean >配置信息转换为容器的内部表示,并将这些BeanDefinition注册到BeanDefinitionRegistry中。Spring容器的BeanDefintionRegistry就像Spring配置信息的内存数据库,后续操作直接从BeanDefintionRegistry中读取配置信息。一般情况下,BeanDefinition只在容器启动时加载并解析,除非容器刷新或重启,这些信息不会发生变化。当然,如果用户有特殊的需求,也可以通过编程的方式在运行期调整BeanDefinition的定义。

    创建BeanDefinition

    创建BeanDefinition主要包括两个步骤:

    1. 利用BeanDefinitionReader读取承载配置信息的Resource,通过XML解析器解析配置信息的DOM对象,简单地每个< bean >生成对应地BeanDefinition对象。但是这里生成的BeanDefinition可能是半成品,因为在配置文件中,可能通过占位符变量引用外部属性文件的属性,这些占位符变量在这一步里还没有被解析出来;
    2. 利用容器中注册的BeanFatoryPostProcessor对半成品的BeanDefinition进行加工处理,将以占位符表示的配置解析为最终的实际值,这样半成品的BeanDefinition就成为成品的BeanDefinition。
  • 相关阅读:
    shiro cookie登录根据角色跳转不同页面的解决方案
    springboot 引入shiro缓存及rememberMe支持
    android开发记录2 webview调用二维码扫描
    android app开发记录1
    bootstrap datetimepicker 出现选中后没有日期的原因
    mybatis-plus @Select select in 查询实现
    Mybatis-Plus 中的 @Select 出现查询不到数据的原因
    caffe Python API 之InnerProduct
    caffe Python API 之LRN
    caffe Python API 之Dropout
  • 原文地址:https://www.cnblogs.com/xiao2/p/7711288.html
Copyright © 2011-2022 走看看