spring IOC 容器 实际是一个ConcurrentMap名称factoryBeanObjectCache. 使用到的最重要的模式是工厂模式。
1. 定位资源(定位配置文件)
2. 加载(加载配置文件)
3. 注册(解析配置文件,并封装成BeanDefantion,只是bean的说明(bean的依赖关系等),bean 还未生成)
4. bean生成(DI依赖注入),初始化时间是:a. 在第一次调用Applicationcontext的getBean 方法时初始化 b.bean 配置了lazy-init方式时会自动注入完成(默认false),初始化spring启动时慢,但是程序执行时效率会高
4.1 判断是不是单例,单例先看是不是已经存在,有先移除,没有则创建
4.2 有没有相互注入的实例化(也要判断是不是单例的,单例的取出注入,非单例的实例化注入)
Spring不生命scope的话,默认都是单例模式的。 spring使用jdk代理或者cglib的代理来实现bean的生产(代理后生成新的类),这样可以拿到所有控制权,更有利于后续做监听等aop切面