Spring-bean的生命周期控制

简介: Spring-bean的生命周期控制

生命周期:从创建到消亡的完整过程


bean声明周期:bean从创建到销毁的整体过程


bean声明周期控制:在bean创建后到销毁前做一些事情

一、使用配置生命周期的方法

在BookDaoImpl中实现类中创建相应的方法:

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

applicationContext.xml配置初始化声明周期回调函数及销毁声明周期回调函数

<!--init-method:设置bean初始化生命周期回调函数-->
    <!--destroy-method:设置bean销毁生命周期回调函数,仅适用于单例对象-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>

执行结果:

cff153f9face48a9972760b508a55295.png

虚拟机退出,没有给bean销毁的机会。


可利用ClassPathXmlApplictionContext里的close方法主动关闭容器,就会执行销毁方法。

import com.itheima.dao.BookDao;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AppForLifeCycle {
    public static void main( String[] args ) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
        //关闭容器
        ctx.close();
    }
}

执行结果:

1badff12be1941dd8ac14426b27be8f4.png

不过这种方式比较暴力,容器还提供另外的方法


在AppForLifeCycle中用关闭钩子函数

//注册关闭钩子函数,在虚拟机退出之前回调此函数,关闭容器
        ctx.registerShutdownHook();

执行结果:

2747750d3e2245e98a263617e04e1b2a.png

关闭钩子在任何时间都可以执行,close关闭比较暴力。

二、生命周期控制——接口控制(了解)

applicationContext.xml配置:

<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
    </bean>

BookServiceImpl:


可以利用接口InitializingBean和DisposableBean来设置初始化和销毁后的方法设置

import com.itheima.dao.BookDao;
import com.itheima.service.BookService;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {
    private BookDao bookDao;
    public void setBookDao(BookDao bookDao) {
        System.out.println("set .....");
        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");
    }
}

执行结果:

e331800a320741efa489449f849c3cef.png

可以看出set在执行在init的执行之后,当你的属性设置完以后,才去执行afterPropertiesSet,所有才叫afterPropertiesSet,在属性设置之后。


小结:

生命周期总结:


初始化容器

1、创建对象

2、执行构造方法

3、执行属性注入(set操作)

4、执行bean初始化方法


使用bean

执行业务操作


关闭/销毁容器

执行bean操作


1、bean生命周期控制


配置

init-method
destroy-method


接口(了解

InitializingBean
DisposableBean


2、关闭容器


ConfigurableApplicationContext

close()
registerShutdownHook()
目录
相关文章
|
5月前
|
Java 开发者 Spring
解析Spring中Bean的生命周期
解析Spring中Bean的生命周期
58 2
|
5月前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
62 0
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
87 1
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细介绍了Spring框架中的核心概念——Spring Bean的生命周期,包括实例化、属性赋值、接口回调、初始化、使用及销毁等10个阶段,并深入剖析了相关源码,如`BeanFactory`、`DefaultListableBeanFactory`和`BeanPostProcessor`等关键类与接口。通过理解这些核心组件,读者可以更好地掌握Spring Bean的管理和控制机制。
88 1
|
4月前
|
Java Spring 容器
Spring Boot 启动源码解析结合Spring Bean生命周期分析
Spring Boot 启动源码解析结合Spring Bean生命周期分析
107 11
|
3月前
|
前端开发 Java 开发者
|
3月前
|
Java Spring
Spring的Bean生命周期中@PostConstruct注解
【8月更文挑战第3天】在Spring框架中,`@PostConstruct`注解标示Bean初始化完成后立即执行的方法。它在依赖注入完成后调用,适用于资源加载、属性设置等初始化操作。若方法中抛出异常,可能影响Bean初始化。与之对应,`@PreDestroy`注解的方法则在Bean销毁前执行,用于资源释放。
143 0
|
6月前
|
Java Spring 容器
Spring注解开发,bean的作用范围及生命周期、Spring注解开发依赖注入
Spring注解开发,bean的作用范围及生命周期、Spring注解开发依赖注入
63 1
Spring注解开发,bean的作用范围及生命周期、Spring注解开发依赖注入
|
5月前
|
Java 开发者 Spring
Spring 中 Bean 的生命周期
Spring 中 Bean 的生命周期
41 2
|
5月前
|
Java Spring
下一篇
无影云桌面