Bean的生命周期的完全实现需要两个阶段
容器的启动 bean的实例化过程(涵盖了bean生命周期的大部分) 容器启动阶段 重点是收集到元信息配置信息,即创建bean需要的信息(beanDefinition) 通过BeanDefinitionReader,读取到beanDefinition信息,再通过beanDefinitionRegistry,将BeanDefinition注册到其里面 // 这是 PropertiesBeanDefinitionReader 把从properties文件读取到的配置信息, // 通过 BeanDefinitionRegistry 注册 BeanDefinition的过程 AbstractBeanDefinition bd = BeanDefinitionReaderUtils.createBeanDefinition( parent, className, getBeanClassLoader()); bd.setScope(scope); // 作用域 默认singleton bd.setAbstract(isAbstract); // 是否是抽象 默认false 如果是抽象的,容器不会实例化bean,而是将beanDefinition信息作为其子类使用 bd.setLazyInit(lazyInit); // 懒加载 默认false 如果是false,容器一启动就会加载bean bd.setConstructorArgumentValues(cas); // 构造参数 bd.setPropertyValues(pvs); // 属性信息 getRegistry().registerBeanDefinition(beanName, bd); // 注册Beandefinition BeanDefinitionReader 有多种,包括:
...