--- Bean 的生命周期 ---
一个spring bean对象的生命周期会经过5个阶段 分别是
实例化
在jvm堆内存中为这个bean分配空间, 这时这个对象就有了物理空间,具体这个对象在内存上的储存可以这样理解
在对象头中储存了一些对象的信息,比如锁 gc信息 哈希值 什么的,其中这里面又个很重要的是
klass pointer 这个指针指向的是存在方法区中的该类的信息块
在图中可以知道,并没有方法所在的区块,这不是我故意没画出来,在实例化类的时候,他并不会把方法也复制一份给对象,而实际能运行的方法是储存在类信息块中的,调用方法是通过调用klass pointer来在类信息中找到对应的方法并执行
属性赋值
将这个bean对象注入到代码中,这时在代码中应用bean的字段就不会为空了
bean的注入和装配,将这个bean注入到代码中
初始化
这里会执行各种通知aware接口的各种方法BeanNameAware , BeanFactoryAware , ApplicationContextAware类
BeanNameAware身份感知:会让这个bean知道自己在容器中的名字
BeanFactoryAware容器工厂感知: 注入BeanFactoryAware实例,这个类提供了从容器中获取其他bean的接口
ApplicationContextAware应用上下文感知:他能让bean获得更多的信息比如环境配置信息,资源文件统一加载等
之后会执行初始化方法
先执行构造方法 --> 注入属性 --> 执行@PostConstruct的方法
使用
现在就能正常使用这个对象了
销毁
在销毁前会执行@PreDestroy方法