返回顶部
首页 > 资讯 > 精选 >Java之Bean的生命周期实例分析
  • 436
分享到

Java之Bean的生命周期实例分析

2023-07-02 10:07:44 436人浏览 独家记忆
摘要

本篇内容主要讲解“Java之Bean的生命周期实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java之Bean的生命周期实例分析”吧!一、什么是生命周期首先理解下什么是生命周期?从创建到

本篇内容主要讲解“Java之Bean的生命周期实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java之Bean的生命周期实例分析”吧!

    一、什么是生命周期

    首先理解下什么是生命周期?

    从创建到消亡的完整过程,例如人从出生到死亡的整个过程就是一个生命周期。

    bean生命周期是什么?

    bean对象从创建到销毁的整体过程。

    bean生命周期控制是什么?

    在bean创建后到销毁前做一些事情。

    二、环境准备

    环境搭建:

    • 创建一个Maven项目

    • pom.xml添加依赖

    • resources下添加spring的配置文件applicationContext.xml

    最终项目的结构如下:

    Java之Bean的生命周期实例分析

    (1)项目中添加BookDao、BookDaoImpl、BookService和BookServiceImpl类

    public interface BookDao {    public void save();}public class BookDaoImpl implements BookDao {    public void save() {        System.out.println("book dao save ...");    }}public interface BookService {    public void save();}public class BookServiceImpl implements BookService{    private BookDao bookDao;    public void setBookDao(BookDao bookDao) {        this.bookDao = bookDao;    }    public void save() {        System.out.println("book service save ...");        bookDao.save();    }}

    (2)resources下提供spring的配置文件

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="Http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/></beans>

    (3)编写AppForLifeCycle运行类,加载Spring的ioc容器,并从中获取对应的bean对象

    public class AppForLifeCycle {    public static void main( String[] args ) {        ApplicationContext ctx = new             ClassPathXmlApplicationContext("applicationContext.xml");        BookDao bookDao = (BookDao) ctx.getBean("bookDao");        bookDao.save();    }}

    三、生命周期设置

    接下来,在上面这个环境中来为BookDao添加生命周期的控制方法,具体的控制有两个阶段:

    • bean创建之后,想要添加内容,比如用来初始化需要用到资源

    • bean销毁之前,想要添加内容,比如用来释放用到的资源

    步骤1:添加初始化和销毁方法

    针对这两个阶段,我们在BooDaoImpl类中分别添加两个方法,方法名任意

    public class BookDaoImpl implements BookDao {    public void save() {        System.out.println("book dao save ...");    }    //表示bean初始化对应的操作    public void init(){        System.out.println("init...");    }    //表示bean销毁前对应的操作    public void destory(){        System.out.println("destory...");    }}

    步骤2:配置生命周期

    在配置文件添加配置,如下:

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>

    步骤3:运行程序

    运行AppForLifeCycle打印结果为:

    Java之Bean的生命周期实例分析

    从结果中可以看出,init方法执行了,但是destroy方法却未执行,这是为什么呢?

    • Spring的IOC容器是运行在JVM

    • 运行main方法后,JVM启动,Spring加载配置文件生成IOC容器,从容器获取bean对象,然后调方法执行

    • main方法执行完后,JVM退出,这个时候IOC容器中的bean还没有来得及销毁就已经结束了

    • 所以没有调用对应的destroy方法

    知道了出现问题的原因,具体该如何解决呢?

    四、close关闭容器

    ApplicationContext中没有close方法

    需要将ApplicationContext更换成ClassPathXmlApplicationContext

    ClassPathXmlApplicationContext ctx = new     ClassPathXmlApplicationContext("applicationContext.xml");

    调用ctx的close()方法

    ctx.close();

    运行程序,就能执行destroy方法的内容

    Java之Bean的生命周期实例分析

    这种方式比较暴力,直接就关闭掉容器了,接下来介绍另一种方式,

    五、注册钩子关闭容器

    在容器未关闭之前,提前设置好回调函数,让JVM在退出之前回调此函数来关闭容器

    调用ctx的reGISterShutdownHook()方法

    是全局变量,方法放置位置无所谓

    ctx.registerShutdownHook();

    注意:registerShutdownHook在ApplicationContext中也没有

    运行后,查询打印结果

    Java之Bean的生命周期实例分析

    两种方式介绍完后,close和registerShutdownHook选哪个?

    相同点:这两种都能用来关闭容器

    不同点:close()是在调用的时候关闭,registerShutdownHook()是在JVM退出前调用关闭。

    分析上面的实现过程,会发现添加初始化和销毁方法,即需要编码也需要配置,实现起来步骤比较多也比较乱。

    Spring提供了两个接口来完成生命周期的控制,好处是可以不用再进行配置init-methoddestroy-method

    接下来在BookServiceImpl完成这两个接口的使用:

    修改BookServiceImpl类,添加两个接口InitializingBean, DisposableBean并实现接口中的两个方法afterPropertiesSetdestroy

    public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {    private BookDao bookDao;    public void setBookDao(BookDao bookDao) {        this.bookDao = bookDao;    }    public void save() {        System.out.println("book service save ...");        bookDao.save();     }    public void destroy() throws Exception {        System.out.println("service destroy");    }    public void afterPropertiesSet() throws Exception {        System.out.println("service init");    }}

    重新运行AppForLifeCycle类

    Java之Bean的生命周期实例分析

    那第二种方式的实现,我们也介绍完了。

    小细节

    对于InitializingBean接口中的afterPropertiesSet方法,翻译过来为属性设置之后。

    对于BookServiceImpl来说,bookDao是它的一个属性

    setBookDao方法是Spring的IOC容器为其注入属性的方法

    思考:afterPropertiesSet和setBookDao谁先执行?

    从方法名分析,猜想应该是setBookDao方法先执行

    验证思路,在setBookDao方法中添加一句话

    public void setBookDao(BookDao bookDao) {        System.out.println("set .....");        this.bookDao = bookDao;    }

    重新运行AppForLifeCycle,打印结果如下:

    Java之Bean的生命周期实例分析

    验证的结果和我们猜想的结果是一致的,所以初始化方法会在类中属性设置之后执行。

    六、bean生命周期总结

    (1)关于Spring中对bean生命周期控制提供了两种方式:

    • 在配置文件中的bean标签中添加init-methoddestroy-method属性

    • 类实现InitializingBeanDisposableBean接口。

    (2)对于bean的生命周期控制在bean的整个生命周期中所处的位置如下:

    初始化容器

    • 创建对象(内存分配)

    • 执行构造方法

    • 执行属性注入(set操作)

    • 4.执行bean初始化方法

    使用bean

    • 执行业务操作

    关闭/销毁容器

    • 执行bean销毁方

    (3)关闭容器的两种方式:

    ConfigurableApplicationContext是ApplicationContext的子类

    • close()方法

    • registerShutdownHook()方法

    到此,相信大家对“Java之Bean的生命周期实例分析”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: Java之Bean的生命周期实例分析

    本文链接: https://lsjlt.com/news/341151.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Java之Bean的生命周期实例分析
      本篇内容主要讲解“Java之Bean的生命周期实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java之Bean的生命周期实例分析”吧!一、什么是生命周期首先理解下什么是生命周期从创建到消...
      99+
      2023-07-02
    • Java Spring Bean生命周期管理的示例分析
      小编给大家分享一下Java Spring Bean生命周期管理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Spring Bean的生命周期管理一、Spring Bean的生命周期通过以下方式...
      99+
      2023-06-22
    • Spring配置使用之Bean生命周期的示例分析
      这篇文章主要介绍了Spring配置使用之Bean生命周期的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。基本概念Spring 中的 Bean 的生命周期,指的是 Be...
      99+
      2023-05-31
      spring bean
    • Spring bean生命周期验证的示例分析
      这篇文章主要为大家展示了“Spring bean生命周期验证的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring bean生命周期验证的示例分析”这篇文章吧。一、从源码注释看be...
      99+
      2023-05-30
      spring bean
    • SpringBean生命周期之Bean的实例化详解
      目录前言实例化前阶段实例化阶段实例化后阶段总结前言 上一节说到了BeanDefinition的合并过程,这节该说Bean的实例化过程了。根据AbstractAutowireCapab...
      99+
      2024-04-02
    • Spring Bean生命周期源码分析
      这篇“Spring Bean生命周期源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring ...
      99+
      2023-07-05
    • Java之Spring Bean作用域和生命周期源码分析
      这篇文章主要讲解了“Java之Spring Bean作用域和生命周期源码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java之Spring Bean作用域和生命周期...
      99+
      2023-07-05
    • Spring Bean中的作用域和生命周期实例分析
      这篇文章主要介绍“Spring Bean中的作用域和生命周期实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Bean中的作用域和生命周期实例分析”文章能帮助大...
      99+
      2023-07-02
    • Spring源码解析之Bean的生命周期
      一、Bean的实例化概述 前一篇分析了BeanDefinition的封装过程,最终将beanName与BeanDefinition以一对一映射关系放到beanDefinitionMa...
      99+
      2024-04-02
    • Vue生命周期实例分析
      这篇文章主要介绍“Vue生命周期实例分析”,在日常操作中,相信很多人在Vue生命周期实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue生命周期实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
      99+
      2023-07-02
    • Java之SpringBean生命周期问题的示例分析
      小编给大家分享一下Java之SpringBean生命周期问题的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring Bean的生命周期?首先说一下S...
      99+
      2023-06-20
    • React的生命周期实例分析
      这篇文章主要讲解了“React的生命周期实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React的生命周期实例分析”吧!一、React生命周期React 生命周期分为三种状态 初始化...
      99+
      2023-07-02
    • Laravel的生命周期实例分析
      本篇内容主要讲解“Laravel的生命周期实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Laravel的生命周期实例分析”吧!Laravel的生命周期 A世间万物皆有生命周期,当我们使用...
      99+
      2023-06-30
    • SpringBoot源码之Bean的生命周期
      入口方法为SpringApplication#run() 1.SpringApplication#run() public ConfigurableApplicationCont...
      99+
      2023-05-15
      SpringBoot之Bean的生命周期 bean生命周期 SpringBean生命周期
    • spring之Bean的生命周期详解
      Bean的生命周期:Bean的定义——Bean的初始化——Bean的使用——Bean的销毁Bean的定义Bean 是 spring 装配的组件模型,一切实体类都可以配置成一个 Bean ,进而就可以在任何其他的 Bean 中使用,一个 Be...
      99+
      2023-05-31
      spring bean 生命周期
    • Angular中的生命周期实例分析
      今天小编给大家分享一下Angular中的生命周期实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
      99+
      2024-04-02
    • Vue中的生命周期实例分析
      这篇文章主要介绍“Vue中的生命周期实例分析”,在日常操作中,相信很多人在Vue中的生命周期实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中的生命周期实例分析”的疑惑有所帮助!接下来,请跟着小编...
      99+
      2023-06-29
    • Vue组件生命周期实例分析
      本文小编为大家详细介绍“Vue组件生命周期实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue组件生命周期实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 组件的生命周期的四个阶段组件的生命周...
      99+
      2023-06-27
    • Vue生命周期实例分析总结
      目录1. 概述2. 页面钩子函数3. 生命周期函数1. 概述 每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如需要设置数据监听、编译模板、挂载实例到 DOM、在数据变化...
      99+
      2024-04-02
    • Java开发学习之Bean的生命周期详解
      目录一、什么是生命周期二、环境准备三、生命周期设置步骤1:添加初始化和销毁方法步骤2:配置生命周期步骤3:运行程序四、close关闭容器五、注册钩子关闭容器六、bean生命周期总结一...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作