面试题: Spring中Bean的实例化和Bean的初始化有什么区别?

Spring中Bean的实例化和Bean的初始化有什么区别?

背景

想换工作, 看了图灵周瑜老师的视频想记录一下, 算是学习结果的一个输出.

答案

Spring 在创建一个Bean对象时, 会先创建出一个Java对象, 会通过反射 来执行类的构造方法 , 从而得到一个Java对象, 这个过程我们通常叫做Spring Bean的实例化.

得到Java对象后, 会进行依赖注入, 依赖注入之后会进行初始化, 而 Bean 的初始化就是调用前面创建出来的Java对象中特定的方法, 比如Java对象实现了 InitializingBean 接口, 那么初始化的时候就会执行Java对象中的 afterPropertiesSet() , Spring 只会执行这个方法, 并不关心做了什么, 我们可以再这个方法中去对某个属性进行校验, 或者直接给某个属性赋值都是可以的, 反正 Bean 的初始化就是执行 afterPropertiesSet() , 或者执行 init-method 指定的方法. 例如下面的两段代码:

java 复制代码
@Component
public class OrderService implements InitializingBean {
    @Override
    public void afterPropertiesSet() {...}

    /**
     * 用户自定义需要初始化的方法
     */
    public void customInitMethod() {...}
}
java 复制代码
public class AppConfig {
    /**
     * 注册Bean, 并指定初始化方法
     *
     * @return OrderService
     */
    @Bean(initMethod = "customInitMethod")
    public OrderService generateOrderService() {
        return new OrderService();
    }
}

扩展知识

什么是实例化

其实就是调用构造方法(这里是通过反射的方式), 生成一个Java Bean.

什么是初始化

其实本质就是在合适的时机去调用指定的方法.

个人评价

2023年10月5日14:59:49

感觉很多面试题, 需要我们去理解考察的点事什么? 就这个题目而言, 我认为就是一个概念统一的问题. 候选人是怎么理解实例化初始化的.

我的回答

首先我想和您描述我对这个题目的理解. 我先解释一个什么是Sprign Bean实例化, 什么是Sprign Bean初始化?

如果这两个概念理解了, 他们的区别也就显而易见了.

相关推荐
风象南2 小时前
我把大脑开源给了AI
人工智能·后端
橙序员小站7 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德7 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆8 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
开心就好202510 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
悟空码字10 小时前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程
小码哥_常10 小时前
大厂不宠@Transactional,背后藏着啥秘密?
后端
奋斗小强10 小时前
内存危机突围战:从原理辨析到线上实战,彻底搞懂 OOM 与内存泄漏
后端
小码哥_常11 小时前
Spring Boot接口防抖秘籍:告别“手抖”,守护数据一致性
后端
心之语歌11 小时前
基于注解+拦截器的API动态路由实现方案
java·后端