Bean对象的声明周期

 

Bean的生命周期

1 :IOC容器会通过BeanDifinition加载xml、注解的创建对象---对象的实例化

2 :根据注解和配置信息对对象的相关成员变量进行赋值填充    ----依赖注入 属性填充

3 :会检查对象是否实现了Aware相关的接口,然后实现Aware接口的内容,加载资源     

4 :BeanPostProcessor  的前置方法

5 :InitializingBean的afterPropertiesSet方法

6 :自定义初始化方法

7 :BeanPostProcessor的后置方法

 

Spring框架中的Bean生命周期是其核心机制之一,理解该生命周期对于开发和调试基于Spring的应用至关重要。整个生命周期从Bean的创建到销毁,涉及多个关键阶段,每个阶段都可以通过特定的接口或注解进行扩展和干预。 ### 1. 实例化阶段(Instantiation) 在Spring容器启动时,首先会根据配置信息(如XML配置文件或注解)创建Bean的实例。这一阶段,Spring会通过反射机制调用类的构造方法来创建一个未初始化的对象。此时,Bean的属性尚未被赋值,依赖关系也未被处理。 ### 2. 属性注入阶段(Population of Properties) 在实例化完成后,Spring容器会根据配置文件或注解,将配置的属性值或依赖对象注入到Bean实例中。这一阶段包括属性设置和依赖注入两个关键步骤。例如,如果一个Bean依赖于另一个BeanSpring会自动解析并注入该依赖。 ```java public class MyBean { private String name; public void setName(String name) { this.name = name; } } ``` ### 3. BeanPostProcessor前置处理(Post-Process Before Initialization) 在Bean的初始化方法调用之前,Spring会调用所有注册的`BeanPostProcessor`接口中的`postProcessBeforeInitialization`方法。这一阶段允许开发者对Bean进行自定义的修改或增强。例如,可以在此阶段对Bean进行代理封装,或者修改其属性值。 ```java @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // 自定义逻辑 return bean; // 返回原始Bean或包装后的Bean } ``` ### 4. 初始化阶段(Initialization) 在Bean的属性注入完成后,Spring会调用Bean的初始化方法。初始化可以通过以下几种方式实现: - **实现`InitializingBean`接口**:该接口提供了一个`afterPropertiesSet`方法,用于定义初始化逻辑。 - **自定义初始化方法**:通过`@Bean(initMethod = "init")`或XML配置中的`init-method`属性指定自定义的初始化方法。 - **使用`@PostConstruct`注解**:该注解标注的方法会在Bean的所有依赖注入完成后执行。 ```java @Service public class CacheService implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("CacheService初始化"); } @PostConstruct public void setup() { System.out.println("通过@PostConstruct初始化"); } } ``` ### 5. BeanPostProcessor后置处理(Post-Process After Initialization) 在Bean的初始化方法调用完成后,Spring会再次调用所有注册的`BeanPostProcessor`接口中的`postProcessAfterInitialization`方法。这一阶段通常用于对已经初始化的Bean进行进一步的处理,例如生成代理对象。 ```java @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { // 自定义逻辑 return bean; // 返回原始Bean或增强后的Bean } ``` ### 6. 使用阶段(In Use) 经过初始化阶段后,Bean已经准备好,可以被应用程序使用。此时,Bean处于活跃状态,能够响应来自其他组件的请求。 ### 7. 销毁阶段(Destruction) 当Spring容器关闭时,会触发Bean的销毁过程。销毁可以通过以下几种方式实现: - **实现`DisposableBean`接口**:该接口提供了一个`destroy`方法,用于定义销毁逻辑。 - **自定义销毁方法**:通过`@Bean(destroyMethod = "destroy")`或XML配置中的`destroy-method`属性指定自定义的销毁方法。 - **使用`@PreDestroy`注解**:该注解标注的方法会在Bean销毁之前执行。 ```java @Service public class CacheService implements DisposableBean { @Override public void destroy() throws Exception { System.out.println("CacheService销毁"); } @PreDestroy public void cleanUp() { System.out.println("通过@PreDestroy清理资源"); } } ``` ### 8. 容器管理流程 在整个生命周期中,Spring容器通过管理Bean的创建、初始化、使用和销毁,确保了Bean的生命周期与容器的生命周期保持一致。开发者可以通过实现特定的接口或使用注解,对Bean的生命周期进行扩展和干预,从而满足不同的业务需求。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值