IOC容器的初始化:
1. BeanDefinition的Resource定位、载入和注册。
2. Resource定位:容器寻找数据,ResourceLoader通过统一的Resource接口完成。
3. BeanDefinition载入:将用户Bean表示成IOC容器的内部数据结构-->BeanDefinition。
4. BeanDefinition注册:IOC容器通过hashmap(beanDefinitionMap)管理。beanName为key,BeanDefinition为value。
IOC容器的注入:
1. 默认为容器启动时对Bean的预实例化。如果指定懒加载,则用户第一次向IOC容器索要bean时触发(getBean方法)。
2. 容器会在缓存map中寻找单例Bean,如果取不到,则去双亲BeanFactory中获取,一直向上获取。
3. 如取不到,则通过createBean创建实例,以及所有依赖的实例。
4. createBean 不但生成了bean,还实现了bean的预处理(init-method方法)和后置处理器等。spring可以使用JVM的反射来创建bean,也可以使用CGLib来增强字节码创建bean。