Spring中Bean的生命周期实例解析

 更新时间:2023年12月01日 08:41:11   作者:MC-闰土  
这篇文章主要介绍了Spring中Bean的生命周期实例解析,我们定义一个自定义的MySpringBeanPostProcessor,主要是重写了BeanPostProcessor接口的postProcessBeforeInitialization与postProcessAfterInitialization方法,需要的朋友可以参考下

Bean的生命周期

spring bean的生命周期官方的流程图如下:

接下来 我们用代码验证一下是否如图所愿:

首先定义一个testBean

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
 *
 * @author runtu
 * @version TestBean, v2.0 2019/12/13 9:19
 **/
public class TestBean implements BeanNameAware, BeanFactoryAware, ApplicationContextAware,
                      InitializingBean, DisposableBean {
    public TestBean() {
        System.out.println("=====================构造方法========================");
    }
    @Override
    public void setBeanName(String s) {
        System.out.println("=====================BeanNameAware========================");
    }
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("=====================BeanFactoryAware========================");
    }
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("=====================ApplicationContextAware========================");
    }
    @Override
    public void afterPropertiesSet() {
        System.out.println("=====================InitializingBean========================");
    }
    @Override
    public void destroy() {
        System.out.println("=====================DisposableBean========================");
    }
    public void init() {
        System.out.println("=====================init========================");
    }
    public void shutdown() {
        System.out.println("=====================shutdown========================");
    }
}

再定义一个自定义的MySpringBeanPostProcessor,主要是重写了BeanPostProcessor接口的postProcessBeforeInitialization与postProcessAfterInitialization方法。

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
/**
 *
 * @author runtu
 * @version MySpringBeanPostProcessor, v2.0 2019/12/13 9:25
 **/
@Component
public class MySpringBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean,
                                                  String beanName) throws BeansException {
        if (bean instanceof TestBean) {
            System.out.println(
                "=====================postProcessBeforeInitialization========================");
        }
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean,
                                                 String beanName) throws BeansException {
        if (bean instanceof TestBean) {
            System.out.println(
                "=====================postProcessAfterInitialization========================");
        }
        return bean;
    }
}

此处我工程为springboot,把TestBean注入之后,启动项目

@Bean(initMethod = "init", destroyMethod = "shutdown")
public TestBean testBean() {
     return new TestBean();
}

把一些无关的日志剃掉之后,控制台打印结果如下:

# 启动程序之后控制台依次打印:
=====================构造方法========================
=====================BeanNameAware========================
=====================BeanFactoryAware========================
=====================ApplicationContextAware========================
=====================postProcessBeforeInitialization========================
=====================InitializingBean========================
=====================init========================
=====================postProcessAfterInitialization========================
 # 停止程序之后依次打印:
=====================DisposableBean========================
=====================shutdown========================

到此这篇关于Spring中Bean的生命周期实例解析的文章就介绍到这了,更多相关Bean的生命周期内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springbootAOP定义切点获取/修改请求参数方式

    springbootAOP定义切点获取/修改请求参数方式

    这篇文章主要介绍了springbootAOP定义切点获取/修改请求参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Go Java算法之为运算表达式设计优先级实例

    Go Java算法之为运算表达式设计优先级实例

    这篇文章主要为大家介绍了Go Java算法之为运算表达式设计优先级实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java实现短信验证码服务的完整代码示例

    Java实现短信验证码服务的完整代码示例

    这篇文章主要介绍了Java实现短信验证码服务的完整代码示例,文中使用阿里云的短信服务进行应用开发的流程,包括将属性写入application.yml配置文件,定义类并指定配置文件,注入实体类对象等等,需要的朋友可以参考下
    2024-09-09
  • Java 中的 clone( ) 和 new哪个效率更高

    Java 中的 clone( ) 和 new哪个效率更高

    很多朋友不太清楚clone()和new那个更快?针对这个问题我百度了好多资料,最终小编总结下关于Java 中的 clone( ) 和 new哪个效率更高的问题,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • 浅谈SpringCloud之zuul源码解析

    浅谈SpringCloud之zuul源码解析

    这篇文章主要介绍了浅谈SpringCloud之zuul源码解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • java环境中的JDK、JVM、JRE详细介绍

    java环境中的JDK、JVM、JRE详细介绍

    这篇文章主要介绍了java环境中的JDK、JVM、JRE详细介绍的相关资料,对于初学者还是有必要了解下,细致说明他们是什么,需要的朋友可以参考下
    2016-11-11
  • Idea如何集成Git&添加项目到git仓库

    Idea如何集成Git&添加项目到git仓库

    这篇文章主要介绍了Idea如何集成Git&添加项目到git仓库,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • MyBatis插件机制超详细讲解

    MyBatis插件机制超详细讲解

    MyBatis在四大对象的创建过程中,都会有插件进行介入。插件可以利用动态代理机制一层层的包装目标对象,而实现在目标对象执行目标方法之前进行拦截的效果
    2022-11-11
  • Springmvc Controller接口代码示例

    Springmvc Controller接口代码示例

    这篇文章主要介绍了Springmvc Controller接口代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java中StringUtils与CollectionUtils和ObjectUtil概念讲解

    Java中StringUtils与CollectionUtils和ObjectUtil概念讲解

    这篇文章主要介绍了Java中StringUtils与CollectionUtils和ObjectUtil概念,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12

最新评论