spring中bean的生命周期
bean生命周期简易版
* 生命周期:1、创建对象(实例化)
* 生命周期:2、依赖注入(为属性赋值)
* 生命周期:3、初始化(需要通过bean中init-method属性指定初始化方法)
* 生命周期:5、销毁(ioc容器关闭时销毁
* 需要通过bean的destroy-method属性指定销毁方法)
* 注意:
* 若bean的作用域为单例时,
* (每次获取bean对象时都是同一个,
* 没必要等到获取bean时再执行前三生命周期)
* 生命周期的前三步骤会在获取IOC容器时执行,
* 生命周期销毁也可以被ioc。close所控制关闭
*
* 若bean的作用域为多例时,
* (每次获取bean的对象都不同,
* 每次再获取bean时再执行前三生命周期)
* 生命周期的前三步骤会在获取bean的时候执行
* 生命周期销毁的方法不再被ioc.close所控制关闭
public void tset(){
//ConfigurableApplicationContext是ApplicationContext的子接,
// 其中扩展了刷新和关闭容器的方法
ConfigurableApplicationContext ioc=new ClassPathXmlApplicationContext("spring-lifecycle.xml");
User user = ioc.getBean(User.class);
System.out.println(user);
ioc.close();
}
scope:设置bean的作用域
scope="singleton|prototype"
singleton(单例):表示获取该bean所对应的对象都是同一个
prototype(多例):表示获取该bean所对应的对象都不是同一个
<bean id="uesr" scope="prototype" class="com.javasm.spring.pojo.User"
init-method="initMethod" destroy-method="destroyMethod">
<property name="id" value="1"></property>
<property name="username" value="admin"></property>
<property name="password" value="123456"></property>
<property name="age" value="23"></property>
</bean>
* 生命周期:1、创建对象(实例化)
* 生命周期:2、依赖注入(为属性赋值)
* 生命周期:3、后置处理器的postProcessBeforeInitialization方法
* 生命周期:4、初始化(需要通过bean中init-method属性指定初始化方法)
* 生命周期:5、后置处理器的postProcessAfterInitialization方法
* 生命周期:6、bean对象就绪可以使用
* 生命周期:7、bean对象销毁
* (需要通过bean的destroy-method属性指定销毁方法)
* 生命周期:8、ioc容器关闭
bean的后置处理器
bean的后置处理器会在生命周期的初始化前后添加额外的操作,需要实现BeanPostProcessor接口,
且配置到IOC容器中,需要注意的是,bean后置处理器不是单独针对某一个bean生效,而是针对IOC容
器中所有bean都会执行
public class MyBeanProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
//此方法再bean的生命周期的初始化之前来执行
System.out.println("MyBeanProcessor-->后置处理器的postProcessBeforeInitialization");
return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
//此方法再bean的生命周期的初始化之后来执行
System.out.println("MyBeanProcessor-->后置处理器的postProcessAfterInitialization");
return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
}
}
配置的完成后针对IOC容 器中所有bean都会执行
<bean id="myBeanProcessor" class="com.javasm.spring.process.MyBeanProcessor"></bean>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!