美文网首页
Spring IoC之原理解析(四)

Spring IoC之原理解析(四)

作者: 萌妈码码 | 来源:发表于2018-10-06 21:11 被阅读0次

    源码看多了有点云里雾里的感觉,还是需要通过总结来梳理几个常见问题。

    依赖注入发生的时间

    当Spring IoC容器完成了Bean定义资源的定位、载入和解析注册以后,IoC容器中已经管理类Bean定义的相关数据,但是此时IoC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况发生:
    (1).用户第一次通过getBean方法向IoC容索要Bean时,IoC容器触发依赖注入。
    (2).当用户在Bean定义资源中为<Bean>元素配置了lazy-init属性,即让容器在解析注册Bean定义时进行预实例化,触发依赖注入。

    BeanFactory vs. FactoryBean

    BeanFactory:Bean工厂,是一个工厂(Factory),我们Spring IoC容器的最顶层接口就是这个BeanFactory,它的作用是管理Bean,即实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
    FactoryBean:工厂Bean,是一个Bean,作用是产生其他bean实例。通常情况下,这种bean没有什么特别的要求,仅需要提供一个工厂方法,该方法用来返回其他bean实例。通常情况下,bean无须自己实现工厂模式,Spring容器担任工厂角色;但少数情况下,容器中的bean本身就是工厂,其作用是产生其它bean实例。

    当用户使用容器本身时,可以使用转义字符”&”来得到FactoryBean本身,以区别通过FactoryBean产生的实例对象和FactoryBean对象本身。在BeanFactory中通过如下代码定义了该转义字符:
    StringFACTORY_BEAN_PREFIX = "&";
    如果myJndiObject是一个FactoryBean,则使用&myJndiObject得到的是myJndiObject对象,而不是myJndiObject产生出来的对象。

    查看源码,可以发现,在请求getBean的时候, 会检查Bean是不是FactoryBean类型,如果是的话,则会调用其getObject方法产生一个实例。

    FactoryBean的实现类有非常多,比如:Proxy、RMI、JNDI、ServletContextFactoryBean等等,FactoryBean接口为Spring容器提供了一个很好的封装机制,具体的getObject有不同的实现类根据不同的实现策略来具体提供。

    引用
    Spring IOC源码解读
    Spring IOC 容器源码分析

    相关文章

      网友评论

          本文标题:Spring IoC之原理解析(四)

          本文链接:https://www.haomeiwen.com/subject/fcehaftx.html