Bean 的生命周期的各个阶段

本文详细解释了Java中Spring框架中Bean对象的生命周期,包括实例化、属性赋值、初始化(如@Autowired和@PostConstruct)、使用以及销毁(如@PreDestroy)的过程,通过代码示例展示了每个阶段的执行顺序。
摘要由CSDN通过智能技术生成

⽣命周期指的是⼀个对象从诞⽣到销毁的整个⽣命过程, 我们把这个过程就叫做⼀个对象的⽣命周期.

生命周期有几个阶段?

可以分为分为以下5个部分:

  1. 实例化(为Bean分配内存空间)
  2. 属性赋值(Bean注⼊和装配, ⽐如 @AutoWired )
  3. 初始化:
    执⾏各种通知,
    如 BeanNameAware , BeanFactoryAware,ApplicationContextAware 的接⼝⽅法.
    执⾏初始化⽅法,
    xml定义 init-method
    使⽤注解的⽅式 @PostConstruct
    执⾏初始化后置⽅法( BeanPostProcessor )
  4. 使⽤Bean
  5. 销毁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

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值