spring常见面试题:IOC、循环依赖、设计模式

一、谈谈你对SpringIOC的理解

在这里插入图片描述

二、BeanFactory和FactoryBean的区别

在这里插入图片描述

三、spring中用到哪些设计模式?

在这里插入图片描述

四、applicationContext和BeanFactory的区别

在这里插入图片描述

五、谈谈你对循环依赖的理解

在这里插入图片描述
请添加图片描述

六、springboot自动装配实现的原理

1、当启动springboot应用程序的时候,会选创建SpringApplication的对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器和监听器,在这个过程中会加载整个应用程序中的spring.factories文件,将文件的内容放到缓存中,方便后续获取。

2、SpringApplication对象创建完成之后,开始执行run方法,来完成整个启动,启动过程中最主要的有两个方法,第一个是prepareContext,第二个是refreshContext,在这两个关键步骤中完成了自动装配的核心功能,前面的处理逻辑包含了上下文对象的创建,banner的打印,异常报告器的准备等各个准备工作,方便后续来进行调用。

3、在prepareContext方法中主要是完成对上下文对象的初始化操作,包括了属性值的设置,比如环境对象,在整个过程中有一个非常重要的方法,叫做load,load主要完成一件事,将当前启动类作为一个beanDefinition注册到registry中,方便后续在进行BeanFactoryPostProcessor调用执行的时候,找到对应的主类,来完成@SpringBootApplication,@EnableAutoConfiguration等注解的解析工作。

4、在refreshContext方法中会进行整个容器的刷新过程,会调用spring中的refresh方法,refresh方法中有13个非常关键的方法,来完成整个spring应用程序的启动,在自动装配过程中,会调用invokeBeanFactoryPsotProcessor方法,在此方法中主要是对ConfigurationClassPostProcessor类的处理,这个是BFPP的子类,也是BDRPP的子类,在调用的时候会先调用BDRPP中的postProcessBeanDefinitionRegistry方法,然后调用postProcessBeanFactory方法,在执行postProcessBeanDefinitionRegistry的时候会解析处理各种注解,包含@PropertySource,@ComponentScan,@ComponentScans,@Bean,@Import等注解,最主要的是@Import注解的解析。

5、在解析@Import注解的时候,会有一个getImports方法,从主类开始递归解析注解,把所有包含@Import的注解都解析到,然后在processImport方法中对Import的类进行分类,此处主要是识别的时候AutoConfigurationImportSelect归属于ImportSelect的子类,在后续过程中会调用deferredImportSelectorHandler中的process方法,来完成EnableAutoConfiguration的加载。

七、Spring中事务的传播特性

1.传播特性总结

在这里插入图片描述

2.REQUIRED和NESTED回滚的区别

在回答这两种方式区别的时候,最大的问题在于保存点的设置,很多同学回认为内部设置REQUIRED和NESTED效果是一样的,其实在外层方法对内层方法的异常情况在进行捕获的时候区别很大,使用REQUIRED的时候,会报"Transaction rolled back because it has been marked as rollback-only"信息,因为内部异常了,设置了回滚标记,外部捕获异常后,要进行事务的提交,此时发现回滚标记,意味着要回滚,所以会报异常。而NESTED不会发生这种情况,因为在回滚的时候把回滚标记清除了,外部捕获异常后去提交,没发现回滚标记,就可以正常提交了

3.REQUIRED_NEW和NESTED的区别

这两种方式产生的效果是一样的,但是REQUIRED_NEW会有新的连接产生,而NESTED使用的是当前事务的连接,而且NESTED还可以回滚到保存点,REQUIRED_NEW每次都是一个新的事务,单独回滚,但NESTED其实是一个事务,外层事务可以控制内层事务的回滚,内层就算没有异常,外层出现异常,也可以全部回滚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值