程序猿阿嘴 潜水
  • 5发帖数
  • 5主题数
  • 0关注数
  • 0粉丝
开启左侧

阿里 1 面:读过spring源码么,可以介绍一下么?

[复制链接]
程序猿阿嘴 发表于 2021-9-13 13:05:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
这个是一个粉丝去阿里面试,由于他的简历上写了读过 spring 的源码,
所以面试官就问到了:看你读过 spring 的源码,可以先容一下他的流程么?
说实话,这个问题如果可以或许答复好,不说别的,spring 这块说明你掌握的照旧比力到位的,会让面试官刮目相看。
1、面试官想考察什么?

这个面试题算是一个开放性的面试题,面试官主要是想考察你对spring掌握的程度,所以大家可以根据自己掌握的程度随意发挥,但是有 2 点大家只管答复上来

  • 第 1 点:spring 容器启动过程中的关键流程节点
  • 第 2 点:spring 为咱们提供的一些扩展点,这些扩展点黑白常紧张的,可以或许对 spring 进行扩展,至少算是高工了,也能表现出你的能力
2、尝试答复一下


  • spring 是一个快速开辟框架,可以帮助我们来管理对象
  • spring 的源码黑白常优秀的,用到了许多设计模式,整体的质量在开源框架中数一数二,这句话说出来,逼格直接上来了
3、spring 容器的大致流程


  • 创建 spring 容器:此阶段会创建 BeanFactory
  • 初始化 spring 容器:这个阶段对 bean 容器进行各种设置,这个阶段中,我们可以在容器中添加一些扩展点,spring 为我们提供了 3 个扩展接口,这 3 个接口可以对容器的过程进行干预,3 个接口分别是(这 3 个接口可以或许答复上来是很牛的):
  • BeanDefinitionRegistryPostProcessor:用来干预 bean 的注册
  • BeanFactoryPostProcessor:用来对 spring 容器中的 bean 定义进行修改,调整 bean 定义的一些属性的值
  • BeanPostProcessor:用来对 bean 的创建过程进行扩展
  • 启动容器,开始进行扫描,扫描会得到 BeanDefinition 对象,放在一个 Map 中,每个 BeanDefinition 对象中包含了每个 bean 定义的详细信息(好比 bean 的名称、bean 地类、bean 的注入方式、bean 的初始化方法、销毁方法等信息)
  • 容器会对 BeanDefinition 进行过滤,得到所有非懒加载即单例的 bean,然后开始创建这些 bean
  • bean 的创建过程主要有:实例化、初始化、注入依赖,bean 在创建的过程中有许多扩展点,这些扩展点基本上都是通过 BeanPostProcessor 接口或者子接口来实现的,我们如果想对 bean 的创建过程进行干预,那么也可以自己创建一些 BeanPostProcessor,将其设置到 spring 容器中。spring 中有许多功能都是通过这个接口实现的,好比:spring 中的 aop、事务、异步处理、缓存、@Autowired 注解等等都是通过 BeanPostProcessor 来实现的,所以这个接口特别的强大。
  • 容器启动完毕,然后会发布容器启动完毕的事件
  • 这里回头再来说说这俩接口:BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor,特别强大的两个接口,这俩接口可以用来干预 spring 容器中 bean 的定义,好比对容器中定义的 bean 列表进行增编削查,这个就特别厉害了,好比我们认识的@Configuration 注解就是靠这个实现的
4、总结

算是一个送分题,没有特别标准的答案,说出大概的流程,及这 3 个接口(BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor、BeanPostProcessor)就差不多了。

精彩评论2

xiaoai2011 发表于 2021-9-15 10:18:58 | 显示全部楼层
转发了
老王998673 发表于 2021-9-14 07:57:49 | 显示全部楼层
转发了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
在线客服邮箱
wxcy#wkgb.net

邮箱地址#换为@

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城