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>
posted @   别亦难  阅读(158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示