面试【谈谈Spring理解和Bean的声明周期】框架 容器 生态,应用程序更加容易。Bean的5个阶段。

1、谈一下你对spring的理解
2、spring的IOC容器的核心实现原理是什么
3、详细聊一下spring框架中有哪些扩展的方式
4、详细聊一下bean的生命周期
5、BeanFactory和FactoryBean的区别

1、谈一下你对spring的理解

spring 使创建Java 企业应用程序变得更加容易,它提供了在企业环境中接受Java 语言所需的一切,,并支持Groovy 和 Kotlin 作为JVM上的替代语言,并可根据应用程序的需要灵活地创建多种体系结构。从 springFramework 5.0 开始,Spring 而需要 JDK 8(Java SE 8+),并且已经为JDK9 提供了现成的支持。

spring支持各种应用场景,在大型企业中,应用程序通常需要运行很长时间,而且必须运行在 jdk和应用服务器上,这种场景开发人员无法控制其升级周期。其他可能作为一个单独的jar嵌入到服务器去运行,也有可能在云环境中。还有一些可能是不需要服务器的独立应用程序(如批处理或集成的工作任务)。
spring 是开源的。它拥有一个庞大而且活跃的社区,提供不同范围的,真实用户的持续反馈。这也帮助spring不断地改进,不断发展。

Ioc
AOP

spring是一个框架,同时是一个容器,还是一个生态。|

2、详细聊一下bean的生命周期

5个阶段

大致可以分为五个优段

  • 分别是创建前准备

  • 创建实例化

  • 依赖注入

  • 缓存容器

  • 销毁实例 这样一些阶段

加载和销毁的时候,配置一些扩展,init-method,destory-method

  • 会在 Spring 加载过程中,触发一些回调。
创建前准备:让其扩展

实例化BeanFactoryPostProcessor(BeanFactory后置处理器)

  • 会比Bean先实例化

实例化BeanPostProcessor(Bean后置处理器)
实例化BeanPostProcessor实现类

主要作用:

bean 在开始加载之前呢

要从上下文和一些配置中啊

去解析并且查找 Bean有关的扩展实现

  • 比如像init-method
    • 客器在初始化Bean的时候,会调用的方法
  • destroy method
    • 客器在销毁Bean的时候,会调用的方法

以及BeanFactoryPostProcessor(BeanFactory后置处理器)

  • 这一类 bean 加载过程中的一些
  • 前置和后置的一些处理扩展实现
  • 这些或者配置啊,
    • 其实是Spring 提供给开发省用来去实现Bean 加载过程中的一些扩展
  • 在很多的和Sping集成的中间件,也比较常见
    • 比如:Dubbo 这样一些中间件
创建实例阶段:反射

第二个是创建实例阶段

  • 主要作用:是通过反射,去创建Bean的实例对象
  • 并且会扫描和解析,bean 声朋的一些属性

执行Bean的构造器
正式创建Bean

执行InstantiationAwareBeanPostProcessor的postProcessPropertyValues()方法

  • 当依赖注入发生之前,Java对象已经创建,
    但是Spring Bean还不对外可用
依赖注入阶段:对象依赖

第三个段是依赖主入阶段

如果被实例化的Bean,存在依赖 其他Bean对象的 一些情况。

  • 则需要败这些依顿的Ben,进行对象注入

  • 比如常见的 @Autowired,以及 Setter注入 等的 配置形式

同时 这个阶段 会融发—些扩展的调用

  • 比如说常见扩展类:BeanPostProcessors

    • 用来去实现Ban初始化前,后的扩展回调
  • 以及像 BeanFactoryAware 等

为Bean注入属性

先设置Bean的name
再设置创建Bean的Factory

  • 调用BeanNameAware的setBeanName0方法
    测用BeanFactoryAware的setBeanFactory0方法

所有初始化动作(如afterPropertiesSet.init-method等)回调之前,都将把
BeanPostProcessor赋值给新创建的Bean

  • 执行BeanPostProcessor的postProcessBeforelnitialization()方法(后置处理器再实例化之前的方法)

设置好所有的Bean属性之后,由BeanFactory调用

  • 调用linitializingBeanBgafterPropertieSet0方法
缓存容器阶段:三个缓存 升到1级

主要的作用是把Bean呢 保存到容器

以下Spring的缓存中

到了这个价段的Bean,就可以被开发者去使用了

涉及常见的操作:init:method

  • 这个属性配置一些方法,或者这个阶段会被调用

以及 像BeanPostProcessors 的 的后置处理器方法

也会在这个阶段被触发

调用Bean的init-method方法(在配置中属性指定的方法)
执行BeanPostProcessor的postProcessAfterlnitializationQ方法(Bean后置处理器在实例化之后执行)
执行InstantiationAwareBeanPostProcessor的postProcessAfterinitializationQ方法(初始化感知后置处理器在实例化之后执行)

  • 我们自己写的业务逻辑,在比后可以正常执行

  • 容器初给化成功

  • 执行正常调用后,

    后面就是销Bean的逻辑

销毁实例:上下文 被关闭

第五个阶段是销毁实例

当Spring的 应用上下文 被关闭的时候

那么这 个上下文中所有的Bean,会被销毁,

  • 如果存在Bean,实现了 像 DisposableBean接口,
  • 或者配置了,destory-method属胜的一些方法
  • 会在这个价段会被调用

销毁实例
调用DiposibleBean的的destory0方法

  • 被BeanFactory调用,最终销毁单份例对象

调用Beandestory-method方法(在配置中属性指定的方法

img

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值