⽣命周期指的是⼀个对象从诞⽣到销毁的整个⽣命过程, 我们把这个过程就叫做⼀个对象的⽣命周期.
生命周期有几个阶段?
可以分为分为以下5个部分:
- 实例化(为Bean分配内存空间)
- 属性赋值(Bean注⼊和装配, ⽐如 @AutoWired )
- 初始化:
执⾏各种通知,
如 BeanNameAware , BeanFactoryAware,ApplicationContextAware 的接⼝⽅法.
执⾏初始化⽅法,
xml定义 init-method
使⽤注解的⽅式 @PostConstruct
执⾏初始化后置⽅法( BeanPostProcessor ) - 使⽤Bean
- 销毁Bean
销毁容器的各种⽅法, 如 @PreDestroy , DisposableBean 接⼝⽅法, destroy-method
实例化和属性赋值对应构造⽅法和setter⽅法的注⼊. 初始化和销毁是⽤⼾能⾃定义扩展的两个阶段,
可以在实例化之后, 类加载完成之前进⾏⾃定义"事件"处理.
⽐如我们现在需要买⼀栋房⼦, 那么我们的流程是这样的:
先买房(实例化, 从⽆到有)
装修(设置属性)
买家电, 如洗⾐机, 冰箱, 电视, 空调等([各种]初始化,可以⼊住);
⼊住(使⽤ Bean)
卖房(Bean 销毁)
代码演示
import com.example.demo.component.UserComponent;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class BeanLifeComponent implements BeanNameAware {
private UserComponent userComponent;
public BeanLifeComponent() {
System.out.println("执⾏构造函数");
}
@Autowired
public void setUserComponent(UserComponent userComponent) {
System.out.println("设置属性userComponent");
this.userComponent = userComponent;
}
@Override
public void setBeanName(String s) {
System.out.println("执⾏了 setBeanName ⽅法:" + s);
}
/**
* 初始化
* /
@PostConstruct
public void postConstruct() {
System.out.println("执⾏ PostConstruct()");
}
public void use() {
System.out.println("执⾏了use⽅法");
}
/**
* 销毁前执⾏⽅法
*/
@PreDestroy
public void preDestroy() {
System.out.println("执⾏:preDestroy()");
}
}
通过观察运行结果可知:
1.先执⾏构造函数
2. 设置属性
3. Bean初始化
4. 使⽤Bean
5. 销毁Bean