文章目录
- 一、Spring(Bean)执行流程
- 二、Bean生命周期
- Bean的生命周期演示
- 总结
一、Spring(Bean)执行流程
- 启动容器(启动项目)
- 读取配置文件(初始化)
a) 使用xml
注册bean
b) 配置bean
根(扫描)路径 - 将
bean
存储到Spring
中(存操作): 通过类注解进行扫描和装配 - 将
bean
从Spring
读取出来(取操作),装配到相应的类
二、Bean生命周期
所谓的生命周期指的是一个对象从诞生到销毁的整个生命过程,我们把这个过程就叫做一个对象的生命周期。
- 实例化(对应
JVM
中的"加载"),从无到有,将字节码转换成内存中的对象,只是分配了内存 ex: 买了一套毛坯房 - 设置属性(属性有可能是外部资源需要调用
Spring
里面的对象进行注入的,所以需要先将外部资源注入进来,才能进行初始化操作),就是Bean
注入和装配 ex: 购买装修材料(引入外部资源) Bean
初始化 ex: 房子装修- 各种通知: 实现了各种
Aware
通知的方法,BeanNameAware
、BeanFactoryAware
、ApplicationContextAware
的接口方法 ex:打电话给各个装修的师傅来施工(水工、电工、瓦工) - 执行
BeanPostProcessor
初始化前置方法 ex: 师傅到达现场,先勘察环境,指定装修方案(前置工作) - 执行
@PostConstruct
初始化方法,依赖注入操作之后被执行,使用这个注解就是执行当前类的初始化方法 ex: 两类师傅进行装修,技术好的,技术一般 - 执行自己指定的
init-method
方法(如果有指定的话),跟上面一条一样,都是执行初始化方法,init-method
方法是xml
时代的方法 - 执行
BeanPostProcess
初始化后置方法 ex: 装修之后的清理工作
- 各种通知: 实现了各种
- 使用
Bean
ex : 入住房子 - 销毁
Bean
ex: 卖掉房子
Bean的生命周期演示
class BeanLifeComponent implements BeanNameAware {
public void setBeanName(String s) {
System.out.println("执行通知");
}
public void postConstruct() {
System.out.println("执行了PostConstruct初始化方法");
}
public void init() {
System.out.println("执行了 init-method 初始化方法");
}
public void preDestory() {
System.out.println("执行了PreDestroy销毁方法");
}
}
public
执行Demo
:
public class Demo3 {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
BeanLifeComponent beanLifeComponent = applicationContext.getBean("beanLifeComponent",BeanLifeComponent.class);
System.out.println("使用Bean");
//销毁Bean
applicationContext.destroy();
}
}