首页 > 其他分享 >高频面试题:bean的生命周期

高频面试题:bean的生命周期

时间:2024-12-15 15:32:50浏览次数:6  
标签:容器 面试题 生命周期 Spring 接口 bean 调用 注解

在Spring框架中,bean的生命周期由Spring容器管理。Spring提供了一系列的接口和回调方法,允许你在bean的生命周期中的特定阶段执行自定义逻辑。以下是Spring中管理bean生命周期的主要步骤和接口:

1. 实例化Bean

Spring容器首先会使用bean的构造函数或工厂方法创建bean的实例。

2. 属性赋值

在bean实例化之后,Spring容器会注入配置的属性值,这些值来自XML配置、注解或Java配置类。

3. BeanNameAwareBeanFactoryAware 和 ApplicationContextAware 接口

  • BeanNameAware: 如果bean实现了BeanNameAware接口,Spring容器会调用setBeanName方法,传入bean的名称。
  • BeanFactoryAware: 如果bean实现了BeanFactoryAware接口,Spring容器会调用setBeanFactory方法,传入BeanFactory实例。
  • ApplicationContextAware: 如果bean实现了ApplicationContextAware接口,Spring容器会调用setApplicationContext方法,传入ApplicationContext实例。

4. InitializingBean 接口

如果bean实现了InitializingBean接口,Spring容器会调用afterPropertiesSet方法。这是一个在所有属性设置之后执行自定义初始化逻辑的好地方。

5. init-method 配置

你可以在XML配置中为bean指定一个init-method,该方法会在属性设置之后被调用。

6. @PostConstruct 注解

如果bean使用了JSR-250注解,Spring容器会在属性设置之后调用用@PostConstruct注解标记的方法。

7. 使用中的bean

此时,bean已经准备好被应用程序使用了,可以从Spring容器中获取并注入到其他bean中。

8. DisposableBean 接口

在容器关闭之前,如果bean实现了DisposableBean接口,Spring容器会调用destroy方法。

9. destroy-method 配置

你可以在XML配置中为bean指定一个destroy-method,该方法会在容器关闭bean之前被调用。

10. @PreDestroy 注解

如果bean使用了JSR-250注解,Spring容器会在容器关闭bean之前调用用@PreDestroy注解标记的方法。

以下是如何在Java配置中使用这些接口和注解的示例:

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("singleton")
public class MyBean implements InitializingBean, DisposableBean {

    public MyBean() {
        // 构造函数
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        // 在属性设置之后执行的初始化逻辑
        System.out.println("MyBean is initialized");
    }

    @PostConstruct
    public void init() {
        // 在属性设置之后执行的初始化逻辑
        System.out.println("MyBean post-construct");
    }

    @Override
    public void destroy() throws Exception {
        // 在容器关闭之前执行的销毁逻辑
        System.out.println("MyBean is destroyed");
    }

    @PreDestroy
    public void cleanup() {
        // 在容器关闭之前执行的销毁逻辑
        System.out.println("MyBean pre-destroy");
    }
}

通过实现这些接口和使用注解,你可以控制Spring容器管理的bean的生命周期中的特定阶段。

标签:容器,面试题,生命周期,Spring,接口,bean,调用,注解
From: https://blog.csdn.net/weixin_73060959/article/details/144346346

相关文章

  • 2025mysql经典面试题合集!
    1.解释MySQL中的JOIN操作。JOIN操作用于结合两个或多个数据库表的行。类型包括INNERJOIN(只返回两表匹配的行)、LEFTJOIN(返回左表的所有行及右表匹配的行)、RIGHTJOIN(返回右表的所有行及左表匹配的行)等。2.如何优化MySQL查询?优化MySQL查询的方法包括:使用合适的索引、避免......
  • 2025全网最全Redis面试题合集
    1.使用Redis有哪些好处?(1)速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(2)支持丰富数据类型,支持string,list,set,sortedset,hash(3)支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行(4)丰富的......
  • 米哈游大数据面试题及参考答案
    怎么判断两个链表是否相交?怎么优化?判断两个链表是否相交可以采用多种方法。一种方法是使用双指针。首先分别遍历两个链表,得到两个链表的长度。然后让长链表的指针先走两个链表长度差的步数。之后,同时移动两个链表的指针,每次比较两个指针是否指向相同的节点。如果指向相同......
  • 有效的括号(字节面试题 最优解)
    题目来源20.有效的括号-力扣(LeetCode)题目描述给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例1:输入:s......
  • 2025年最新完整java面试题(含答案)
    1**、面向对象的特征有哪些方面****【基础】**答:面向对象的特征主要有以下几个方面:1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一......
  • 腾讯技术岗位笔试&面试题(四)
    说在前面本篇文章是腾讯技术面试题目汇总第四篇。后续将持续推出互联网大厂,如阿里,腾讯,百度,美团,头条等技术面试题目,以及答案和分析。欢迎大家点赞关注转发。原文链接:https://mp.weixin.qq.com/s/9EpKvEJECIh6rrd_Kqdfkw1.__stdcall和__cdecl的区别?__stdcall__stdcall是函......
  • C++面试题总结---操作系统(1)
    Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。1.查看进程运行状态的指令:ps命令。“ps-aux|grepPID”,用来查看某PID进程状态2.查看内存使用情况的指令:free命令。“free-m”,命令查看内存使用情况。3.tar解压文件的参数:五个命令中必......
  • IDEA bean json互转换插件
    插件安装步骤:File->Settings->Plugins—>查找所需插件—>Install或File->Settings->Plugins—>Installplugfromdisk—>选择下载好的插件安装一般插件安装后重启idea即可生效。一、Javabean转换json 的插件 java-bean-to-json下面详细安装图文:先到setting(Ctrl+Alt+......
  • C#经典算法面试题
    1.递归算法1.1C#递归算法计算阶乘的方法一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。原理:亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。 ///<summary......
  • Vue的生命周期方法
    Vue生命周期方法详解beforeCreate执行时机:在实例初始化之后,数据观测(dataobserver)和事件配置(event/watchersetup)之前被调用。内部状态:此时,组件的选项对象(例如data、methods、computed等)已经可以访问,但是这些数据还没有进行响应式处理。这意味着this指向组件实例本身,不过......