SSM

发布时间 2023-06-11 22:55:21作者: 海鸥用户

1.IOC/AOP

 

2.Bean的生命周期

 

Spring Bean 的生命周期
1.加载Bean定义
  通过 loadBeanDefinitions 扫描所有xml配置、注解将Bean记录在beanDefinitionMap中

2.创建Bean对象
  通过 createBean 遍历 beanDefinitionMap 创建bean

  2.1.构建对象
    容器通过 createBeanInstance 进行对象构造
    获取构造方法:@Autowired
    准备参数 根据类查找>参数名查找
    构造对象
      无参对象直接实例化
  2.2.填充属性
    通过populateBean方法为Bean内部所需的属性进行赋值

    通常是 @Autowired 注解的变量
  2.3.初始化Bean对象
    通过initializeBean对填充后的实例进行初始化

    填充初始化容器相关信息
    通过 invokeAwareMethods 方法:为实现aware接口【信息感知接口】的Bean 设置注入beanName、beanFactory等容器信息

    初始化构造方法
    通过 invokeInitMethods 方法进行初始化:

    如果Bean实现InitializingBean接口进行处理【未实现则不进行】

    afterPropertiesSet方法【bean填充属性后执行】
    initMethod 方法
    Bean的后置处理
    在invokeInitMethods 的前后进行

    applyBeanPostProcessorsBeforeInitialization
    invokeInitMethods
    applyBeanPostProcessorsAfterInitialization
  在后置处理中处理了包括:AOP【AnnotationAwareAspectJAutoProxyCreator】

  负责 构造后@PostConstruct 和 销毁前@PreDestroy 的 InitDestoryAnnotationBeanPostProcessor 等

  注册销毁
  通过reigsterDisposableBean处理实现了DisposableBean接口的Bean的注册

3.添加到单例池
通过 addSingleton 方法,将Bean 加入到单例池 singleObjects

4.销毁
  4.1.销毁前
调用 bean中@PreDestory 注解的方法

通过 postProcessBeforeDestruction 方法调用destoryBean逐一销毁Bean

4.2.销毁
调用 destoryBeans

4.3.执行客户自定义销毁
调用 invokeCustomDestoryMethod