- 生命周期:从创建到消亡的完整过程
- bean生命周期:bean从创建到销毁的整体过程
- bean生命周期控制:在bean创建后到销毁前做一些事情
接下来我们介绍生命周期控制方法:
- 数据层提供控制方法
由数据层提供方法,在xml配置文件中设置该方法
// 数据层package com.itheima.dao.impl;import com.itheima.dao.BookDao;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...");}}<!--配置文件--><?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"><!--init-method:设置bean初始化生命周期回调函数--><!--destroy-method:设置bean销毁生命周期回调函数,仅适用于单例对象--><bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"><property name="bookDao" ref="bookDao"/></bean></beans>- 接口控制方法(了解)
Spring为创建提供了两个接口,我们只需要继承并实现该方法即可
package com.itheima.service.impl;import com.itheima.dao.BookDao;import com.itheima.service.BookService;import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;// InitializingBean,DisposableBean 分别对应afterPropertiesSet,destroy方法 , 代表创建和销毁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");}}<?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" init-method="init" destroy-method="destory"/><!--直接调用即可--><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"><property name="bookDao" ref="bookDao"/></bean></beans>我们需要提及一下bean的销毁时机:(了解即可)
- 因为默认情况下,我们的bean不会被销毁,因为虚拟机会直接退出 , ClassPathXmlApplicationContext会被忽略销毁过程
所以如果我们希望销毁bean观察到destroy的实现,需要手动关闭:
- 手动关闭容器方法:
package com.itheima;import com.itheima.dao.BookDao;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class AppForLifeCycle {public static void main( String[] args ) {// 注意:这里需要采用ClassPathXmlApplicationContext作为对象,因为只有这个类才具有close方法ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");BookDao bookDao = (BookDao) ctx.getBean("bookDao");bookDao.save();//关闭容器ctx.close();}}- 注册关闭钩子 , 在虚拟机退出前先关闭容器再推出虚拟机
package com.itheima;import com.itheima.dao.BookDao;import org.springframework.context.ApplicationContext;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.registerShutdownHook();}}最后我们统计一下整体生命周期:
- 初始化容器:创建对象(分配内存)->执行构造方法->执行属性注入(set操作)->执行bean初始化方法
- 使用bean:执行业务操作
- 关闭/销毁容器:执行bean销毁方法
依赖注入方式首先我们要知道类中传递数据的方法有两种:
- 普通方法(Set方法)
推荐阅读
-
-
-
合肥中考报名可以补报吗 2023年合肥庐阳区中考补报名联系方式
-
72年女鼠婚配男属什么最好,72年3月出生的鼠个和什么属相最配
-
-
-
多肉植物的养殖方法和注意事项有哪些 多肉植物有哪些养殖方法
-
-
关于清竹禅绘隐恶扬善图轴简述 清竹禅绘隐恶扬善图轴
-
-
-
-
-
-
-
-
-
-
-