当前位置: 首页 > article >正文

SSM框架学习-bean生命周期理解

在这里插入图片描述

  1. Spring启动,查找并加载需要被Spring管理的Bean,进行Bean的实例化(反射机制);
  2. 利用依赖注入完成 Bean 中所有属性值的配置注入;

第一类Aware接口:

  1. 如果 Bean 实现了 BeanNameAware 接口的话,Spring 将 Bean 的 Id 传递给 setBeanName() 方法;
  2. 如果 Bean 实现了 BeanClassLoaderAware 接口,则 Spring 调用 setBeanClassLoader() 方法传入classLoader的引用;
  3. 如果 Bean 实现了 BeanFactoryAware 接口的话,则 Spring 调用 setBeanFactory() 方法传入当前工厂实例的引用;

第二类Aware接口:

  1. 如果 Bean 实现了 EnvironmentAware 接口,则 Spring 调用 setEnvironment() 方法传入当前 Environment 实例的引用;
  2. 如果 Bean 实现了 EmbeddedValueResolverAware 接口,则 Spring 调用 setEmbeddedValueResolver() 方法传入当前 StringValueResolver 实例的引用;
  3. 如果 Bean 实现了 ApplicationContextAware 接口,Spring 将调用 Bean 的 setApplicationContext() 方法,将 Bean 所在引用上下文引用传入进来;
  1. 如果 Bean 实现了 BeanPostProcessor 接口,Spring 就将调用它们的 postProcessBeforeInitialization() 方法;
  2. 如果 Bean 实现了 InitializingBean 接口,Spring 将调用它们的 afterPropertiesSet() 方法。类似地,如果 Bean 使用 init-method 声明了初始化方法,该方法也会被调用;
  3. 如果 Bean 实现了 BeanPostProcessor 接口,**Spring 就将调用它们的 postProcessAfterInitialization() 方法;**此时,Bean 已经准备就绪,可以被应用程序使用了。它们将一直驻留在应用上下文中,直到应用上下文被销毁;
  4. 如果 Bean 实现了 DisposableBean 接口,Spring 将调用它的 destory() 接口方法,同样,如果 Bean 使用了 destory-method 声明销毁方法,该方法也会被调用;
  5. 如果在 <bean> 中指定了该 Bean 的作用范围为 scope=“singleton”,则将该 Bean 放入 Spring IoC 的缓存池中,将触发 Spring 对该 Bean 的生命周期管理;如果在 <bean> 中指定了该 Bean 的作用范围为 scope=“prototype”,则将该 Bean 交给调用者,调用者管理该 Bean 的生命周期,Spring 不再管理该 Bean

综上所述,Bean的完整生命周期有各种方法调用,主要分为这几类

  1. Bean自身的方法: 这个包括了Bean本身调用的方法和通过配置文件中<bean>的init-method和destroy-method指定的方法;
  2. Bean级生命周期接口方法: 这个包括了BeanNameAware、BeanFactoryAware、ApplicationContextAware;当然也包括InitializingBean和DiposableBean这些接口的方法(可以被@PostConstruct和@PreDestroy注解替代);
  3. 容器级生命周期接口方法: 这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”;
  4. 工厂后处理器接口方法: 这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。

http://www.kler.cn/a/17987.html

相关文章:

  • 【MySQL 保姆级教学】事务的隔离级别(详细)--下(13)
  • JVM详解:JVM的系统架构
  • Autosar CP 基于CAN的时间同步规范导读
  • ️️一篇快速上手 AJAX 异步前后端交互
  • BERT配置详解1:构建强大的自然语言处理模型
  • vxe-table 3.10+ 进阶高级用法(一),根据业务需求自定义实现筛选功能
  • new BroadcastChannel(),BroadcastChannel API使用介绍
  • 这就是实力~ 腾讯云大咖亲码 “redis深度笔记” 无废话全精华
  • 洗稿伪原创工具-洗稿生成器
  • SSM框架详解,实现高效优雅的Java Web开发
  • 【前端面经】CSS-浮动和清除浮动的方式
  • ePWM模块-时基模块(2)
  • Postgresql+Springboot yml基本使用
  • 通用操作日志处理方案
  • Vue如何使用富文本编辑器
  • PyTorch数据加载工具:高效处理常见数据集的利器
  • lombok常用的注解及使用方法
  • 实现前后端分离的登陆验证token思路
  • SpringBoot【开发实用篇】---- 配置高级
  • uniapp和小程序如何分包,详细步骤手把手(图解)
  • Java ——线程池
  • GitHub上的AutoGPT神秘的面纱
  • 100种思维模型之蝴蝶效应思维模型-56
  • 【QT】 QSS类的用法及基本语法介绍
  • 装饰器模式
  • 第三章 用户身份