扯淡:
各位:
命运就算颠沛流离
命运就算曲折离奇
命运就算恐吓着你做人没趣味
别流泪 心酸 更不应舍弃
...
主题:
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); }