zoukankan      html  css  js  c++  java
  • spring理解一

     spring基本工作原理例如以下:

     1.查找bean配置文件

     2.载入bean配置文件并解析生成中间表示BeanDefinition

     3.注冊beanDefinition

     4.假设是单例或lazy-init=false,则直接生成bean

     

     spring将

     1.查找bean配置文件

     2.载入bean配置文件并解析生成中间表示BeanDefinition

     3.注冊beanDefinition

    这三部分开,能够提供很多其它的定制给用户。

     spring将配置文件之类的文件资源抽象成一个Resource,封装了getInputStream。isClose等方法。

     Resource有子类ClasspathResouce及FileSystemResource

     Resouce攻克了第一步查找bean配置文件的问题

     

     接着要解决第二步载bean配置文件并解析生成中间表示BeanDefinition。

     spring这个是通过BeanDefinitionReader(接口)去做。

     BeanDefinitionReader有实现XmlBeanDefinitionReader等。

     XmlBeanDefinitionReader有个參数为容器BeanRegistry用于存放解析后的BeanDefinition。

     即BeanDefinitionReader能够分三步完毕第二步任务:1.将Resource中的inputStream解析成xml的Dom形式 2.依据Dom。生成BeanDefinition 3.注冊到BeanRegistry中

     这里将resource解析成Dom是用还有一个类DefaultDocumentLoader去做。

    解析xml生成BeanDefinition则交给:BeanDefinitionParserDelegate去做。

     注冊BeanDefinition就简单了,由于BeanRegitry容器是做为參数进入XmlBeanDefinitionReader的,所以直接调就能够了。


     能够看出spring设计XmlBeanDefinitionReader类时。将这个类的职责分解,并将每一部分任务交给对应的类去做。

     样例:

             ClassPathResource res=new ClassPathResource("containerTest.xml"); //定位资源
            DefaultListableBeanFactory factory=new DefaultListableBeanFactory(); //BeanRegistry容器
            XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(factory); //

             int n=reader.loadBeanDefinitions(res); //触发,XmlBeanDefinitionReader载入,解析配置文件,生成BeanDefinition的动作

            B b=(B) factory.getBean("b");



      


     

  • 相关阅读:
    常用的几个vagrant命令
    window下sh文件在linux转码
    centos 7 免密登录
    centos7系列-给普通用户sudo权限
    Hadoop hdfs完全分布式搭建教程
    ribbon的注解使用报错--No instances available for [IP]
    修改VirtualBox虚拟机默认存储路径及虚拟机迁移方法
    【SpringMVC】文件上传Expected MultipartHttpServletRequest: is a MultipartResolver错误解决
    发现不错待研究的技术
    android的开发 华为手机上不显示menu键
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6820945.html
Copyright © 2011-2022 走看看