Spring创建Bean对象过程
类—>推断构造方法—>对象—>依赖注入—>初始化前—>初始化---->初始化后—>代理对象—>放入Map单例池—>Bean对象
1 - 推断构造方法
在Spring中默认使用无参构造方法,在多个构造方法中,没有任何构造方法标注@Autowired注解情况下,默认寻找无参构造方法,若找不到则报错。在多个构造方法中,若有某个构造方法标注@Autowired注解,则使用该构造方法创建对象
2 - 依赖注入
在Spring创建了当前对象后,会利用反射对当前对象的属性进行赋值,赋值的前提是属性标注例如@Autowired,然后根据当前对象的类型去单例池寻找,如果利用类型找不到再根据名字去单例池寻找,如果两个形式都找不到则报错。
3 - 初始化前
Spring提供了@PostConstruct注解,被标注的方法会执行。
4 - 初始化
当前对象是否实现了InitializingBean接口,Spring源码中会判断当前对象是否实现了此接口
源码 boolean isInitiallizingBean = (Bean instanceof InitializingBean);
若实现了此接口,Spring会将当前对象转换为InitializingBean对象然后执行afterPropertiesSet()方法