首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤

Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤

作者头像
Java廖志伟
发布2022-09-28 11:23:52
发布2022-09-28 11:23:52
25100
代码可运行
举报
文章被收录于专栏:高级开发进阶高级开发进阶
运行总次数:0
代码可运行

IOC之Bean的生命周期 实验22:创建带有生命周期方法的bean

代码语言:javascript
代码运行次数:0
运行
复制
public class Person {
    private Integer id;
    private String name;

    public void init() {
        System.out.println("这是person对象的初始化方法");
    }

    public void destroy() {
        System.out.println("这是person对象的销毁方法");
    }

配置信息:

代码语言:javascript
代码运行次数:0
运行
复制
 <!-- 
     init-method="init" 		初始化方法	在对象被创建之后
     destroy-method="destroy"	销毁方法	在容器关闭的时候执行
  -->
<bean id="p24" class="com.pojo.Person" init-method="init" destroy-method="destroy">
    <property name="id" value="24"></property>
</bean>

测试代码:

代码语言:javascript
代码运行次数:0
运行
复制
@Test
public void test13() throws Exception {
    ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    System.out.println(applicationContext.getBean("p24"));
    applicationContext.close();
}

Bean的后置处理器BeanPostProcessor bean的后置处理器,可以在bean对象初始化之前或之后做一些工作。 要使用bean的后置处理器,需要实现这个接口并配置。

实验23:测试bean的后置处理器

person对象,一定要有初始化方法

代码语言:javascript
代码运行次数:0
运行
复制
public class Person {
    private Integer id;
    private String name;
    private Car car;

    public void init() {
        System.out.println("这是person对象的初始化方法");
    }

后置处理器对象

代码语言:javascript
代码运行次数:0
运行
复制
public class MyBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessAfterInitialization(Object bean, String id) throws BeansException {
        System.out.println("初始化之后执行  bean => " + bean + ", id => " + id);
        return bean;
    }
    /**
     * bean是当前正在初始化的对象
     * id 是当前正在初始化对象的id值 
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String id) throws BeansException {
        System.out.println("初始化之前执行  bean => " + bean + ", id => " + id);
        return bean;
    }

}

配置信息:

代码语言:javascript
代码运行次数:0
运行
复制
 <!-- 
     init-method="init" 		初始化方法	在对象被创建之后
     destroy-method="destroy"	销毁方法	在容器关闭的时候执行
  -->
<bean id="p24" class="com.pojo.Person" init-method="init" destroy-method="destroy">
    <property name="id" value="24"></property>
</bean>

<!-- 配置bean的后置处理器 -->
<bean class="com.pojo.MyBeanPostProcessor" />

测试的代码:

代码语言:javascript
代码运行次数:0
运行
复制
@Test
public void test13() throws Exception {
    ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean2.xml");
    System.out.println(applicationContext.getBean("p24"));
    applicationContext.close();
}

对于单例的bean,生命周期有11个步骤: 1.instantiate bean对象实例化,bean对象实例化,是在加载配置文件的时候实例的。即,我们启动spring容器的时候,加载配置文件,此时就实例化bean了。 2.populate properties 封装属性 3.如果Bean实现BeanNameAware, 执行 setBeanName 4.如果Bean实现BeanFactoryAware 或者 ApplicationContextAware,设置工厂 setBeanFactory 或者上下文对象 setApplicationContext 5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization(此点常常用来增强bean) 6.如果Bean实现InitializingBean 执行 afterPropertiesSet 7.调用 指定初始化方法 init 8.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessAfterInitialization(此点常常用来增强bean) 9.执行业务处理 10.如果Bean实现 DisposableBean 执行 destroy 11.调用 指定销毁方法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档