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 @ 2022-09-15 16:50  别亦难  阅读(166)  评论(0)    收藏  举报