Spring中bean类的生命周期|面试必问如何回答

简介: Spring中bean类的生命周期|面试必问如何回答

面试过程中,常常会被问到,bean的生命周期,那该如何回答呢?

spring的生命周期大致如下

1.需找所有的bean根据bean定义的信息来实例化bean,默认bean都是单例


2、使用依赖注入,spring按bean定义信息配置bean的所有属性


3、若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递bean的ID


4、若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory() 方法传入工厂自身。


5、若bean实现了ApplicationContextAware()接口,setApplicationContext()方法会被调用


6、若bean实现了InitializingBean,则afterPropertiesSet被调用


7、若bean指定了init-method="init"方法,它将被调用。


8、若BeanPostProcessor和bean关联,则它们的postProcessBeforeInitialization()方法被调用


9、若有BeanPostProcessor和bean关联,则它们的postProcessAfterInitialization()方法被调用


注意:通过已上操作,此时的Bean就可以被应用的系统使用,并将保留在BeanFactory工厂中直到不再需要为止.但我们也可以通过10或者11进行销毁


10、若bean实现了DisposableBean接口,distroy()方法被调用


11、如果指定了destroy-method="close"定制的销毁方法,就调用这个方法


面试如何回答

那肯定会有很多人,这么多记不住,面试该如何应当呢?


面试官一般问到bean的生命周期,你可以这么说


spring在创建bean的时候,首先会根据bean的定义以及一些信息配置来实例化bean,然后bean若实现了前置处理器或者后置处理器的接口后,就会实现他们对应的方法,比如若bean实现了ApplicationContextAware()接口,setApplicationContext()方法会被调用,另外的具体的实现方法记不太清除了,反正就是一些实现了就执行,实现了就执行这样的顺序一次判断,最后就是bean如果实现了销毁的接口,就会将bean销毁,如果没有实现那就一直保留。


回答这个问题的时候一定要自信,让面试官认为你是知道的,只是这些接口没必要一个个去记下来,面试官都不清楚有这么多接口的具体的那个方法的名字要去实现的,但是你就自信的回答就可以了,千万不要支支吾吾,一旦面试官问你能不能举几个前置或者后置说一下,你就说记不到了,哪有程序员去记这些东西的


相关文章
|
18天前
|
XML 安全 Java
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
2天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
25 3
|
16天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
38 2
|
19天前
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
1月前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
16天前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
27 1
|
2月前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!