一 注册
注册过程并不复杂,就是把解析得到的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的创建和注入;
时间: 2024-11-03 09:18:52