前言
先说一下本人情况吧,末流985毕业,毕业之后一直在一家不大不小的公司里安稳上班。上半年因为疫情的原因公司调整了工资,我也是随波逐流跟随大家辞了职。辞职之后向阿里。字节这些都投了简历(但是只收到了阿里的回复)。结果被问倒了在Spring到底是怎么循环依赖问题的,这也是最近两年新出的面试频度较高的面试题!会去之后我也是恶补这方面的知识,现在我把我所学的分享给大家!
作为一名Java方向的程序员,在面试大厂的时候,其实关于spring这一块是问的非常多的,尤其是源码这一块,几乎是逢面试必问,虽然说现在技术更新比较快,但是掌握好spring以及它的源码绝对是你面试的一个杀手锏。以下这份文档就包括了spring从基础到源码主要涉及到的内容有如下
Spring框架功能整体介绍
Spring IOC容器底层注解使用
Spring Ioc容器源码解析
Spring 是如何解决循环依赖的
Spring Aop源码分析
spring 事务源码解析
首先跟大家说一下就是我碰到的面试题,关于spring循环依赖的
什么是循环依赖?
循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:
注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。
Spring中循环依赖场景有:
(1)构造器的循环依赖
(2)field属性的循环依赖
其中,构造器的循环依赖问题无法解决,只能拋出BeanCurrentlyInCreationException异常,在解决属性循环依赖时,spring采用的是提前暴露对象的方法。
Spring怎么解决循环依赖
这里附上一张解决Spring循环依赖的流程图
面对大厂问Spring源码而言,很多的Java面试者都纷纷败北,源码没有一个正确的方法学起来确实挺吃力的,在这把之前学源码的一些经验和笔记分享给大家,希望对那些还在学习Spring源码的朋友有所帮助!
一、 Spring框架功能整体介绍
Sring Core Container
Beans (BeanFacotry的作用)
Context
Expression Language )
Spring Data Access/Integration
Transaction
Spring Web
Spring Aop
Instrumentation
控制反转和依赖注入
什么是控制反转?
二、Spring IOC容器底层注解使用
xml配置文件的形式 VS 配置类的形式
基于xml的形式定义Bean的信息
基于读取配置类的形式定义Bean信息
在配置类上写@CompentScan注解来进行包扫描
排除用法 excludeFilters
包含用法 includeFilters
@ComponentScan.Filter type的类型
FilterType.CUSTOM 自定义类型如何使用
三、Spring Ioc容器源码解析
Spring源码解析之扩展原理
ApplicationListener:Spring是如何发布事件的? )
BeanDefinitionRegistryPostProcessor的处理源码流程
BeanFactoryPostProcessor 处理流程
Spring Bean的实例化过程
bean实例化过程的调用链
bean的实例化过程源码分析
SpringIOC容器启动源码的分析
四、Spring 是如何解决循环依赖的
什么是循环依赖?
代码实例:
可能存在的问题:
解决方案:
什么是早期引用?
五、 Spring Aop源码分析
AOP
基本概念
简单案例
@EnableAspectJAutoProxy
Import(AspectJAutoProxyRegistrar.class)
所以我们来分析AspectJAutoProxyRegistrar类是用来干什么的?
六、spring 事务源码解析
事务概念解析
什么是事物?
事物的特性(ACID)
Spring事务三大接口介绍
PlatformTransactionManager接口介绍
TransactionDefinition 事务属性的定义
七、Spring5.0新特性之日志框架
日志框架场景
我们Java中常用的日志框架是什么?
我们常常听说的就是如下的日子框架,还不知道怎么选?
加入我们系统使用的是SLF4J作为日志门面,我们是如何匹配?
Spring4.Xspring底层使用的日志技术
Spring5.x 底层使用的日志技术
以上就是这份文档的概况,一次搞懂spring以及核心源码,不管是架构师还是开发者,又或是运维,都能够从中学到不少。