当前位置: 首页 > news >正文

网站前台如何刷新南昌市网站备案

网站前台如何刷新,南昌市网站备案,汕头市城市建设开发总公司,牡丹区住房城乡建设局网站这里写目录标题 1. 在类中提供生命周期控制方法,并在配置文件中配置init-method&destroy-method(配置)关闭容器操作1:ctx.close()关闭容器操作2:关闭钩子:ctx.registerShutdownHook() 2. 实现接口来做和…

在这里插入图片描述
在这里插入图片描述

这里写目录标题

  • 1. 在类中提供生命周期控制方法,并在配置文件中配置init-method&destroy-method(配置)
    • 关闭容器操作1:ctx.close()
    • 关闭容器操作2:关闭钩子:ctx.registerShutdownHook()
  • 2. 实现接口来做和init和destroy(接口)
  • 3. bean的生命周期
  • 4. bean的销毁时机

1. 在类中提供生命周期控制方法,并在配置文件中配置init-method&destroy-method(配置)

定义实现类如下:

package com.example.demo231116.dao.impl;import com.example.demo231116.dao.BookDao;public class BookDaoImpl implements BookDao {public void save(){System.out.println("book dao save...");}public void init(){System.out.println("book dao init...");}public void destroy(){System.out.println("book dao destroy...");}
}

配置方法如下:

<bean id="bookDaoCycle" class="com.example.demo231116.dao.impl.BookDaoImpl" init-method="init" destroy-method="destroy" />

最终调用跟平时一样:

// IoC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");BookDao bookDao5 = (BookDao) ctx.getBean("bookDaoCycle");
System.out.println(bookDao5);

输出结果为:

book dao init...
com.example.demo231116.dao.impl.BookDaoImpl@5dd6264

关闭容器操作1:ctx.close()

并没有自动调用destroy方法,因为在程序执行结束后,java虚拟机关闭,程序不会自动调用destroy方法,如果需要调用,可以在程序的末尾加上:ctx.close(),即在java虚拟机关闭之前执行destroy方法
但是事实上,ApplicationContext 并没有close方法, ApplicationContext 下的一个接口才有定义close方法,所以这里想要使用close方法,可以修改IoC容器定义:ClassPathXmlApplicationContextctx = new ClassPathXmlApplicationContext("applicationContext.xml");
然后再末尾调用ctx.close():

// IoC容器
ClassPathXmlApplicationContextctx = new ClassPathXmlApplicationContext("applicationContext.xml");BookDao bookDao5 = (BookDao) ctx.getBean("bookDaoCycle");
System.out.println(bookDao5);ctx.close()

输出结果为:

book dao init...
com.example.demo231116.dao.impl.BookDaoImpl@5dd6264
book dao destroy...

但是如果是这样的话,ctx.close()只能在程序的末尾写,因为在开头定义结束就写的话,这个IoC容器就被销毁了,下面也不可能执行一些getBean的操作

关闭容器操作2:关闭钩子:ctx.registerShutdownHook()

我们可以注册一个关闭钩子,在不用强行关闭IoC容器的情况下,设置在java虚拟机关闭之前让程序执行销毁的方法:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ctx.registerShutdownHook();BookDao bookDao5 = (BookDao) ctx.getBean("bookDaoCycle");
System.out.println(bookDao5);

这样就不再需要强硬地执行ctx.close()方法了
:我在写这些代码的过程中发现一个老师没有提及的点,也是我之前一直忽略的,这些init方法的执行,是在初始化IoC容器时候就执行了,我的完整代码如下:

package com.example.demo231116;import com.example.demo231116.dao.BookDao;
import com.example.demo231116.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Demo231116Application2 {public static void main(String[] args) {// 3. 获取IoC容器ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");ctx.registerShutdownHook();// 4. 获取bean
//        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
//        bookDao.save();BookService bookService = (BookService) ctx.getBean("bookService");bookService.save();BookDao bookDao = (BookDao) ctx.getBean("dao");BookDao bookDao1 = (BookDao) ctx.getBean("dao");System.out.println(bookDao);System.out.println(bookDao1);BookDao bookDao2 = (BookDao) ctx.getBean("bookDaoFactory");System.out.println(bookDao2);BookDao bookDao3 = (BookDao) ctx.getBean("bd");System.out.println(bookDao3);BookDao bookDao4 = (BookDao) ctx.getBean("bookDaoFactoryMethod");System.out.println(bookDao4);BookDao bookDao5 = (BookDao) ctx.getBean("bookDaoCycle");System.out.println(bookDao5);//        ctx.close();}
}

得到的结果是这样的:

Factory method....
实例工厂方法...
book dao init...
book service save...
book dao save...
com.example.demo231116.dao.impl.BookDaoImpl@6193932a
com.example.demo231116.dao.impl.BookDaoImpl@6193932a
com.example.demo231116.dao.impl.BookDaoImpl@647fd8ce
com.example.demo231116.dao.impl.BookDaoImpl@159f197
com.example.demo231116.dao.impl.BookDaoImpl@78aab498
com.example.demo231116.dao.impl.BookDaoImpl@5dd6264
book dao destroy...

事实上,init方法是在IoC容器初始化的时候执行了,而不是在我具体调用getBean()的时候才运行的,默认bean是单例模式,一开始就把init()给执行掉了
如果我不使用单例而是定义多例的scope:

<bean id="bookDaoCycle" class="com.example.demo231116.dao.impl.BookDaoImpl" init-method="init" destroy-method="destroy" scope="prototype" />

主代码如下:

package com.example.demo231116;import com.example.demo231116.dao.BookDao;
import com.example.demo231116.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Demo231116Application2 {public static void main(String[] args) {// 3. 获取IoC容器ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");ctx.registerShutdownHook();// 4. 获取bean
//        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
//        bookDao.save();BookService bookService = (BookService) ctx.getBean("bookService");bookService.save();BookDao bookDao = (BookDao) ctx.getBean("dao");BookDao bookDao1 = (BookDao) ctx.getBean("dao");System.out.println(bookDao);System.out.println(bookDao1);BookDao bookDao2 = (BookDao) ctx.getBean("bookDaoFactory");System.out.println(bookDao2);BookDao bookDao3 = (BookDao) ctx.getBean("bd");System.out.println(bookDao3);BookDao bookDao4 = (BookDao) ctx.getBean("bookDaoFactoryMethod");System.out.println(bookDao4);BookDao bookDao5 = (BookDao) ctx.getBean("bookDaoCycle");BookDao bookDao6 = (BookDao) ctx.getBean("bookDaoCycle");System.out.println(bookDao5);System.out.println(bookDao6);//        ctx.close();}
}

这样运行的结果是:

Factory method....
实例工厂方法...
book service save...
book dao save...
com.example.demo231116.dao.impl.BookDaoImpl@d4342c2
com.example.demo231116.dao.impl.BookDaoImpl@d4342c2
com.example.demo231116.dao.impl.BookDaoImpl@2bbf180e
com.example.demo231116.dao.impl.BookDaoImpl@163e4e87
com.example.demo231116.dao.impl.BookDaoImpl@56de5251
book dao init...
book dao init...
com.example.demo231116.dao.impl.BookDaoImpl@78aab498
com.example.demo231116.dao.impl.BookDaoImpl@5dd6264

是在具体定义实例的时候才执行的init方法,所以scope不同,init方法执行的先后顺序是不一样的

2. 实现接口来做和init和destroy(接口)

只需要在bean类下多实现这两个接口:
并继承必要的方法:
在这里插入图片描述
定义代码如下:

package com.example.demo231116.dao.impl;import com.example.demo231116.dao.BookDao;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;public class BookDaoImpl implements BookDao, InitializingBean, DisposableBean {public void save(){System.out.println("book dao save...");}//    public void init(){
//        System.out.println("book dao init...");
//    }@Overridepublic void destroy() throws Exception {System.out.println("接口destroy");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("接口init");}
}

Spring Config配置如下:

<bean id="bookDaoCycle" class="com.example.demo231116.dao.impl.BookDaoImpl" />

这个afterPropertiesSet的init方法,是在先执行属性设置后再执行init方法

3. bean的生命周期

在这里插入图片描述

4. bean的销毁时机

在这里插入图片描述

http://www.yayakq.cn/news/414235/

相关文章:

  • 绍兴网站关键词推广黄冈论坛百度贴吧
  • 永康企业网站建设翻译网站平台建设
  • 制作网页表白郑州网站建设seo
  • 营销型网站建设网站建设制作扫二维码直接进入网站 怎么做
  • 广告公司网站设计策划学室内装潢设计哪个学校好
  • 山东住房建设厅官网站中国互联网协会是做什么的
  • 外贸官网建站镇江高端网站定制
  • 广东响应式网站建设平台宇说建筑网站
  • 企业网站开发使用方法北京做域名公司
  • 什么网站自己做名片好网站谷歌seo做哪些
  • 基于.net的个人网站开发实录git怎么做隐私政策网站
  • 优秀网站欣赏旅行社网站建设方案书
  • 目前流行的app网站开发模式pc网站 手机网站
  • 滕州市建设局网站网站建设 数据库购买
  • 网站建设最新教程视频教程外语网站建设
  • wordpress大幅广告第三方关键词优化排名
  • 做网站绿色和什么颜色搭配数据库跟网站内容
  • 哈尔滨做网站的价格网络装修平台哪家最好
  • 中国建设银行昆山支行网站郁金香导航 汕头大学网址大全
  • 如何做推广平山做网站优化
  • 晋中推广型网站开发彩票网站开发app
  • 食品企业网站建设方案丽江市企业网站
  • 网站建设工作室深圳电子商务企业有哪些
  • 怎么做购物网站做网站建设怎么赚钱
  • 网站建设 在电商的作用外贸网站推广销售
  • 网站建设的开多少税率做网页前端接活网站
  • 如何做网站稳定客户企业网站模板 首页大图
  • 建设快照网站网站建设设计书
  • 教做糕点的视频网站淘宝单网站建设
  • 极简 单页面网站模板做ppt用什么软件最好