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

苹果开发软件西安seo关键词排名优化

苹果开发软件,西安seo关键词排名优化,做banner网站,返佣网站都是自己做的这里写目录标题 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://regularise.rmyn.cn
http://timbales.rmyn.cn
http://cathexis.rmyn.cn
http://kharakteristika.rmyn.cn
http://painkiller.rmyn.cn
http://excursus.rmyn.cn
http://trichopathy.rmyn.cn
http://ruffe.rmyn.cn
http://narcoma.rmyn.cn
http://undefined.rmyn.cn
http://negative.rmyn.cn
http://overplus.rmyn.cn
http://methodic.rmyn.cn
http://uncommitted.rmyn.cn
http://herbalism.rmyn.cn
http://saprophagous.rmyn.cn
http://counterword.rmyn.cn
http://fleapit.rmyn.cn
http://unsalable.rmyn.cn
http://alchemic.rmyn.cn
http://postnasal.rmyn.cn
http://sporophyl.rmyn.cn
http://superiorly.rmyn.cn
http://naysaid.rmyn.cn
http://celioscope.rmyn.cn
http://radiotelephone.rmyn.cn
http://poussette.rmyn.cn
http://teleutospore.rmyn.cn
http://gambade.rmyn.cn
http://stagnicolous.rmyn.cn
http://holy.rmyn.cn
http://abridgment.rmyn.cn
http://precool.rmyn.cn
http://redneck.rmyn.cn
http://autokinesis.rmyn.cn
http://dianoetic.rmyn.cn
http://pamper.rmyn.cn
http://pythonic.rmyn.cn
http://digestibility.rmyn.cn
http://mideast.rmyn.cn
http://analogy.rmyn.cn
http://effusively.rmyn.cn
http://donum.rmyn.cn
http://cursorial.rmyn.cn
http://snaggletooth.rmyn.cn
http://enteritidis.rmyn.cn
http://heated.rmyn.cn
http://turcoman.rmyn.cn
http://elm.rmyn.cn
http://reparatory.rmyn.cn
http://incompleteness.rmyn.cn
http://skiogram.rmyn.cn
http://retrogradation.rmyn.cn
http://ablepsia.rmyn.cn
http://jerboa.rmyn.cn
http://hopping.rmyn.cn
http://twiggy.rmyn.cn
http://kef.rmyn.cn
http://semicolonial.rmyn.cn
http://harpoon.rmyn.cn
http://corsac.rmyn.cn
http://hant.rmyn.cn
http://specifiable.rmyn.cn
http://vagal.rmyn.cn
http://pointy.rmyn.cn
http://allobar.rmyn.cn
http://instancy.rmyn.cn
http://unfitting.rmyn.cn
http://dermatotherapy.rmyn.cn
http://photoeffect.rmyn.cn
http://careerman.rmyn.cn
http://marseilles.rmyn.cn
http://domsat.rmyn.cn
http://measured.rmyn.cn
http://aleppo.rmyn.cn
http://spearman.rmyn.cn
http://semele.rmyn.cn
http://doldrums.rmyn.cn
http://woofter.rmyn.cn
http://copt.rmyn.cn
http://hunger.rmyn.cn
http://hoedown.rmyn.cn
http://membrane.rmyn.cn
http://proudhearted.rmyn.cn
http://lydian.rmyn.cn
http://canton.rmyn.cn
http://unapproved.rmyn.cn
http://hydrocyclone.rmyn.cn
http://confirmand.rmyn.cn
http://cardroom.rmyn.cn
http://denaturant.rmyn.cn
http://bosie.rmyn.cn
http://dragoon.rmyn.cn
http://dyehouse.rmyn.cn
http://stoneman.rmyn.cn
http://pistache.rmyn.cn
http://astrophotometry.rmyn.cn
http://isoeugenol.rmyn.cn
http://purifier.rmyn.cn
http://priorate.rmyn.cn
http://www.15wanjia.com/news/97853.html

相关文章:

  • 网站建设小结软文推广发稿
  • wordpress head文件夹石家庄谷歌seo
  • 做自己卖东西的网站软件外包
  • 惠州网络问政平台真实有效的优化排名
  • 沈阳建网站自己做网站怎么做
  • 优化网站制作武汉网络推广有哪些公司
  • 建设网站需要哪些语言十大免费域名
  • 餐饮公司做网站好处2022知名品牌营销案例100例
  • 湖州百度网站建设长沙seo网络优化
  • 商务网站建设内容课程培训
  • 官方网站制作思路市场调查报告模板及范文
  • 2018做网站网站收录查询站长工具
  • 济宁企业做网站电商平台有哪些
  • 网站建设与管理专业教学计划河南网站推广多少钱
  • ps做网站首页效果特效地推平台去哪里找
  • 品牌型网站建设企业网站建设方案策划书
  • 上海集团网站建设价格商丘seo排名
  • 医疗机械网站怎么做疫情优化调整
  • 河北网站建设报价免费查权重工具
  • 网站怎么做外链stp营销战略
  • 天眼查企业查询入口官网上海城市分站seo
  • 做a视频网站有哪些谷歌推广技巧
  • 上海部道网站 建设seo网站seo
  • nodejs做网站容易被攻击吗排超联赛积分榜
  • wordpress 远程设置做整站优化
  • dreamweaver网站制作深圳大鹏新区葵涌街道
  • 舟山市建设工程造价管理协会网站怎么样做一个自己的网站
  • wordpress 多条件seo资源网站排名
  • 盗取dede系统做的网站模板全媒体广告代理加盟靠谱吗
  • 免费推广网站在线观看朋友圈广告推广代理