spring源码——资源的注册及依赖注入

一 注册

注册过程并不复杂,就是把解析得到的beandefinition设置到hashmap中去。需要注意的是,如果遇到同名的beandefinition,需要去判断allowbeandefinitionoverriding属性,如果不允许会抛出异常。把bean的名字存入beandefinitionnames,且beanname会作为map的key ,beandefinition作为value。

这里的map名字是beandefinitionmap,,它被ioc容器持有。

至此,ioc的初始化就完成了。

二 依赖注入

依赖注入的过程是用户第一次向ioc容器索要bean时触发的。

实际的方法为dogetbean(参数省略),在这个方法中有几个要注意的点:

2.1 会先从缓存中取得bean,处理那些已经被创建过的单例模式的bean,是为了不重复的创建

2.2 检查是否能在当前的beanfactory中取到需要的bean,如果在当前的工厂中取不到,则到父beanfactory中去取;如果父beanfactory中仍然没有,会一直向上查找;

2.3 获取当前bean的所有依赖bean,这样会出发getbean的递归调用,直到取到一个没有。

bean就是根据beandefinition的定义生成的。

有几个递归的地方:

在上下文体系中查找需要的bean和创建bean时;

在依赖注入时,得到当前bean的依赖bean,同时也出发对依赖bean的创建和注入;

 

posted @ 2016-09-13 20:40  会飞的企鹅吧  阅读(200)  评论(0编辑  收藏  举报