《Spring源码深度解析》学习笔记-默认标签的解析

1.bean标签的解析及注册
    1)通过解析委托类的方法返回BeanDefintionHolder实例
    
    BeanDeifnition及其实现类图如下:


    


    备注内为网上翻译的源码注释,总结就是有三种实现,Root和Child是硬编码,即在编写代码的时候就必须知道他们之间的关系。
    自Spring 2.5 出来以后,已经被GenericBeanDefinition代替,可以动态的指定parent属性。
    
    解析子元素meta


    
    解析子元素lookup-method
    
    解析子元素replaced-method


    
    扩展:对应上面两种元素其实对应spring的两种注入--查找方法注入和强行替换注入,原理是AOP的cglib动态代理注入。
    
        AOP动态代理有两种方式:JDK和CGLIB
            JDK动态代理:业务类必须有对应的接口,动态代理类继承了Proxy,Java单继承,不能再继承其他类,只能通过实现接口实现
                对代理实例封装实现InvocationHandler接口,通过Proxy.newProxyInstance()动态产生代理类
                生成的代理类继承了Proxy实现了业务接口
                
          CGLIB动态代理:有没有接口都可以,因为采用的是继承,继续业务类,产生其子类代理,所以不能对 final 修饰的类进行代理
                实现CGLIB动态代理必须实现MethodInterceptor(方法拦截器)接口
                
    注:由于CGLIB的大部分类是直接对Java字节码进行操作,这样生成的类会在Java的永久堆中,存在触发OutOfMemory异常的风险。
        spring默认使用jdk动态代理,如果类没有接口,则使用cglib
        Spring4已经完全内置了Cglib的功能,无需要额外的Cglib的jar包
        
    解析子元素constructor-org:
        提取index、type、name属性-->解析ref(RuntimeBeanReference封装)和value(TypeStringValue封装)属性-->子元素(镶嵌map)
        指定index属性,属性信息被保存到indexedArgumentValues属性中;否则保存到genericArgumentValues属性中     
    
    解析子元素property
    
    解析子元素qulifier:获取改元素最多的还是注解形式 
    
    2)返回的实例不为空时,默认标签子节点下再有自定义属性,还需要继续对自定义标签解析
        XML转换为GenericBeanDefinition,GenericBeanDefinition只是子类,大部分属性都保存在了AbstractBeanDefinition中
        
    
    3)解析完成后,对解析后的实例进行注册,该操作委托给了bean定义读取工具中的方法
         BeanDefinitionReaderUtils.registBeanDefinition(bdHolder,getResoureceContext().getRegistry())
         


         
        注: fail-fast 机制是Java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast(快速失败)事件
    
    4)最后发出响应事件,通知监听器,bean已加载完成
        getReaderContext().fireComponentRegistered(new BeanComponentDefinition(bdHolder));

     --------------------------------------------------------------------------------------------------------------------------

2.alias标签的解析

3.import标签的解析

applicationContext.xml使用import导入模块配置文件,简化后期维护复杂度,易于管理

eg: <import  resource="XXX.xml">

4.嵌入式beans标签的解析

    与单独的配置文件区别不大

发布了88 篇原创文章 · 获赞 9 · 访问量 10万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览