首页 > 其他分享 >spring常见面试题

spring常见面试题

时间:2024-09-21 15:51:15浏览次数:5  
标签:面试题 缓存 对象 spring 常见 Bean bean 属性

介绍一下spring bean的生命周期

1.加载配置转化成spring bean的定义。

2.使用jdk动态代理根据bean的定义创建bean的实例并封装成beanwrapper。

3.执行populateBean()属性填充方法。

4.执行initializeBean()方法进行bean的初始化,在初始化中,如果 Bean 实现了 BeanNameAware 接⼝,调⽤ setBeanName() ⽅法,传⼊Bean的名字。如果 Bean 实现了 BeanClassLoaderAware 接⼝,调⽤ setBeanClassLoader() ⽅法,传⼊ClassLoader 对象的实例。如果Bean实现了BeanFactoryAware接口调用setBeanFactory方法传入AbstractAutowireCapableBeanFactory对象实例信息。

如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执⾏ postProcessBeforeInitialization() ⽅法

如果实现了InitializingBean接口,这执行afterPropertiesSet()方法。

如果 Bean 在配置⽂件中的定义包含 init-method 属性,执⾏指定的⽅法。

如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执⾏ postProcessAfterInitialization() ⽅法

5.最后执行registerDisposableBeanIfNecessarybean的销毁逻辑,当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接⼝,执⾏ destroy() ⽅法。当要销毁 Bean 的时候,如果 Bean 在配置⽂件中的定义包含 destroy-method 属性,执⾏指定的⽅法。

介绍一下spring的三级缓存

public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {
    
    // ....
    /** 单例对象缓存:k:beanName, v: 实例。一级缓存 */
	/** Cache of singleton objects: bean name to bean instance. */
	private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

	/** 单例工厂缓存:k:beanName, v: ObjectFactory 三级缓存*/
	/** Cache of singleton factories: bean name to ObjectFactory. */
	private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

	/** 早期单例对象缓存:k:beanName, v: 实例 */
	/** Cache of early singleton objects: bean name to bean instance. 二级缓存*/
	private final Map<String, Object> earlySingletonObjects = new ConcurrentHashMap<>(16);
    // ....
    
}

创建对象的时候先看看一级缓存中有没有,如果没有再走二级缓存,如果二级缓存中没有,再走三级缓存。

说一下spring怎样利用三级缓存解决循环依赖

1.也就是说第一次会创建出来a对象,但是a对象中的b属性值为null(半成品),然后会将key为a,value为lambda表达式放入到三级缓存中。

然后进行populateBean方法中进行属性填充,说白了就是开始创建B对象。

2.会创建出来b对象,但是b对象中的a属性值为null(半成品)。然后会将key为b,value为lambda表达式放入到三级缓存中。

然后进行populateBean方法中进行属性填充,说白了给b对象中的a属性进行复制。

3.这个时候会走到我们的lambda表达式中,我们之前创建好的半成品的a对象进行返回。同时将三级缓存中的a对象移除掉,将其放入到二级缓存中(说白了二级缓存中放的是一个半成品对象key:a,value:b属性为null)。

这个时候b对象就是一个完整的成品对象了。

4.将完整的成品的b对象放入到一级缓存中,同时将它从三级缓存中移除。

5.然后将半成品中的a对象的b属性进行赋值。这个时候a也成为了成品对象了。

6.最后将成品的a对象放到一级缓存中,将二级缓存中的a对象进行移除。

说一下aop动态代理的原理

aop增强逻辑的执行时机是在initializeBean方法中,更确切一点说是在BeanPostProcessor的后置处理方法中执行。

其实底层为目标 bean 查找合适的通知器,并封装成一个排好顺序的List集合。遍历集合中的每个拦截器,并执行拦截器中对应的方法。

标签:面试题,缓存,对象,spring,常见,Bean,bean,属性
From: https://www.cnblogs.com/dongyaotou/p/18424119

相关文章

  • 2025基于springboot的网上村委会业务办理系统-JAVA.VUE【源码、论文、开题、实训报告
       博主介绍:......
  • 2025基于springboot的自习室管理和预约系统-JAVA.VUE【源码、论文、开题、实训报告】
       博主介绍:......
  • Java毕设常见创新点汇总
    嗨嗨!这里是泡芙,又是新学期开学,部分学校的毕设也是提上日程了,这段时间不少同学在咨询我的过程中,都无外乎表达了这么几点:1、担心自己的项目太过简单过不了期中检查。2、导师提出了必须要加入创新点等要求,为此焦头烂额。3、自己的题目太大众化,不知道怎么避免查重过高。首先,项......
  • 前端面试CSS常见题目
    1.CSS选择器的优先级(Specificity)面试官通常会问你如何计算CSS选择器的优先级,这对于避免样式冲突、提高代码可维护性很重要。优先级计算规则:!important优先级最高。内联样式(例如:<divstyle="color:red;">)优先级最高,优先级值为1000。ID选择器的优先级为100。类选......
  • Spring Boot框架:Java免税商品商城设计与实现
    摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,免税商品优选购物商城当然也不能排除在外,随着购物商城的不断成熟,它彻底改变了过去传统的免税商品优选购物商城方式,不仅使商城管理难度变低了,还提升了免税商品优选购物商城的灵活......
  • springboot交通管理在线服务系统的开发
    文章目录目录文章目录论文目录项目介绍开发环境系统实现论文参考论文目录第1章 绪论1.1选题动因1.2目的和意义1.3论文结构安排第2章 开发环境与技术2.1MYSQL数据库2.2 Tomcat介绍2.3 vue技术2.4 SpringBoot框架第3章 系统分析3.1可行性......
  • 【Kubernetes】常见面试题汇总(二十四)
    目录 71.假设一家公司想要修改它的部署方法,并希望建立一个更具可扩展性和响应性的平台。您如何看待这家公司能够实现这一目标以满足客户需求?72.考虑一家拥有非常分散的系统的跨国公司,期待解决整体代码库问题。您认为公司如何解决他们的问题?特别说明:题目69-113属于【Kube......
  • 【Kubernetes】常见面试题汇总(二十九)
    目录 81.简述你知道的几种CNI网络插件,并详述其工作原理。K8s常用的CNI网络插件(calico&&flannel),简述一下它们的工作原理和区别。特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目69-113属于【Kubernetes】的生产应用题。8......
  • 【Kubernetes】常见面试题汇总(二十三)
    目录 69.考虑一家拥有分布式系统的跨国公司,拥有大量数据中心,虚拟机和许多从事各种任务的员工。您认为这样公司如何以与Kubernetes一致的方式管理所有任务?70.考虑一种情况,即公司希望通过维持最低成本来提高其效率和技术运营速度。您认为公司将如何实现这一目标?特别说明:题......
  • 【Kubernetes】常见面试题汇总(三十)
    目录 82.Worker节点宕机,简述Pods驱逐流程。特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目69-113属于【Kubernetes】的生产应用题。82.Worker节点宕机,简述Pods驱逐流程。(1)节点宕机的概述:在Kubernetes集群中,当节......