Spring中Bean的实例化和Bean的初始化有什么区别?
- 背景
- 答案
- 扩展知识
- 什么是实例化
- 什么是初始化
- 个人评价
- 我的回答
背景
想换工作, 看了图灵周瑜老师的视频想记录一下, 算是学习结果的一个输出.
答案
Spring 在创建一个Bean对象时, 会先创建出一个Java对象, 会通过反射来执行类的构造方法, 从而得到一个Java对象, 这个过程我们通常叫做Spring Bean的实例化.
得到Java对象后, 会进行依赖注入, 依赖注入之后会进行初始化, 而 Bean 的初始化就是调用前面创建出来的Java对象中特定的方法, 比如Java对象实现了 InitializingBean接口, 那么初始化的时候就会执行Java对象中的 afterPropertiesSet(), Spring 只会执行这个方法, 并不关心做了什么, 我们可以再这个方法中去对某个属性进行校验, 或者直接给某个属性赋值都是可以的, 反正 Bean 的初始化就是执行 afterPropertiesSet(), 或者执行 init-method 指定的方法. 例如下面的两段代码:
@Component
public class OrderService implements InitializingBean {@Overridepublic void afterPropertiesSet() {...}/*** 用户自定义需要初始化的方法*/public void customInitMethod() {...}
}
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初始化?
如果这两个概念理解了, 他们的区别也就显而易见了.