扯淡:

   各位:

      命运就算颠沛流离
     命运就算曲折离奇
     命运就算恐吓着你做人没趣味
     别流泪 心酸 更不应舍弃

     ...

主题:

  Spring源码阅读还在继续,上篇文章初始化IoC容器:摸我

  事实上前面的IOC容器初始化只是建立了BeanDefinition数据映射,而依赖注入的过程是在向Ioc容器索要bean的时候发生的。

  getBean就是触发依赖注入的地方。

 

  1,下面是AbstractBeanFactory的getBean实现。根据scop进行分支处理,比较清晰

  注意:关于spring中的 bean的scop属性,有两个很常用:singleton和prototype

  singleton:这是Spring容器默认的作用域,使用singleton作用域生成的是单实例,在整个Bean容器中仅保留一个实例对象供所有调用者共享引用。单例模式对于那些无会话状态的Bean(如辅助工具类、DAO组件、业务逻辑组件等)是最理想的选择。

  prototype: 原型模式,这是多实例作用域,针对每次不同的请求,Bean容器均会生成一个全新的Bean实例以供调用者使用。

    public Object getBean(String name) throws BeansException {
        // 最终调用doGetBean方法
        return doGetBean(name, null, null, false);
    }

    public <T> T getBean(String name, Class<T> requiredType) throws BeansException {
        return doGetBean(name, requiredType, null, false);
    }

    public Object getBean(String name, Object... args) throws BeansException {
        return doGetBean(name, null, args, false);
    }

    public <T> T getBean(String name, Class<T> requiredType, Object... args) throws BeansException {
        return doGetBean(name, requiredType, args, false);
    }
View Code

相关文章: