00:00
好,前面的课程呢,我们研究了一下给咱们这个容器中添加的这么几种方式,那接下来呢,我们来再研究一下我们跟孕生命周期有关的内容,我呢就来写一个新的咱们这个配置类。好,叫my of,咱们这个life circle,好,我们来研究生命周期啊,我们所谓的这个病的生命周期,病的生命周期。我们指的就是B创建,然后到初始化再到销毁的过程,这个呢就是鼻孕的生命周期,而这个病孕的生命周期呢,我们现在是由容器来管理的,容器管理避孕的生命周期,所是呢,容器帮我们创建鼻应,并且初始化并且销毁,而现在的这个初始化和销毁啊,这个方法呢,我们可以自己来指定,我们可以自定义初始化啊销毁方法来我们定义的这些初始化和销毁方法,那么容器在B进行到哎当前生命周期的时候。
01:22
来调用,我们调用我们自定义的初始化和销毁方法,那么这个初始化和销毁方法啊,我们如何定义呢?我们就得,哎接下来我们说四种方式,那第一种方式啊,就是呢,我们来指定初始化销毁方,如果是以前我们的这个。在中我们可以有一项配置,比如这个配置有个呢,可以有一个destroy满锁的,这是我们以前,哎,基于配置我们可以指定一个初始化方法和一个销毁方法,而这些方法呢,人家规定说这个方法呢,必须没有参数,但是可以抛任何异常,所以这是我们以前的方方式。
02:19
用来指定,相当于是来指定和,那么我们现在用注解的方式怎么做呢?好,我来写一个新的类,比如我们叫卡。好,这个car呢,来写一个它的构造器,如果这个car对象创建,我们就在构造器里边打印一个doctor,哎,这个呢就是它创建对象,那我们可以自定义一个初始化方法叫init,我们假设它就叫init,哎,我们就叫car init。
03:01
我们也可以指定一个自定义的销毁方法。好复制,那我们现在把这个卡能注册在容器中,我们就现在呢,我们先来说我们这是一个配置类,我们把这个卡诶来注册一个卡,我呢就用这个B的方式,好我们加一个at be注去。特又一个看,我先来做测试。好,我先来写一个IOC test来测试这个相等的,好,我来写第一个方法TEST1有一个not con application conest,把我们的配置类con life传进来,好,然后呢,我们先来看这个容器中。
04:18
这是我们第一步。创建IC容器。当我们IC容器创建完的时候,其实我们以前说过,咱们这个我就说容器创建完成,创建完的时候呢,我们就会哎,将咱们这个所有单实例的B啊,我们都会给它创建出来,所以说呢,我们在容器创建的时候,我们可以看到。哎,这个卡的构造器就会被调用了,这是我们要说的第一个,那么在生命周期中,哎,我们生命周期中的咱们这个构造啊,也就说我们这个对象创建,对象创建呢,我们这个单式力,如果是单式力宾,在容器启动的,容器启动的时候创建对象,但是如果是多实力的B啊,我们以前也说过,它是在每次获取,每次获取的时候创建对象。
05:21
这是咱们这个构造器,但是呢,我们现在我们为这个卡自定义了咱们这个初始化和销毁方法,那么让容器要知道它这个方法是用来执行初始化,这个是用来执行销毁的,怎么办呢?如果是以前配置,我们刚才有那个in的的,其实哎我们如果用at宾注解也是一样的,大家来看哎它这是不是有一个叫指定哪个方法是初始化方法,那么这个car呢,就有一个叫in need。哎,那么再来指定哪一个方法是destroy,哎,我们在里边还有一个叫destroy。
06:07
好,我们指定好,指定好以后呢,我们再来启动容器,我们来做这个测试。现在来看走,哎,我们看到容器启动,先是来创建对象,哎,再是进行初始化,也就说呢,这个就被调用了,那什么时候销毁呢?我们容器关闭的时候,比如我们来调一个开比close,我来关闭容器,关闭容器的时候呢,容器就会把它里边的这些单式利宾啊,它之前创建的那都调用销毁方法啊。销毁来看。诶,前面呢,是对象创建初始化,哎,我们这个容器创建完成,然后呢,我们这个日志也打印了,容器关闭,关闭的时候呢,我们这个卡就会进行销毁,那我们就能在这些初始化和销毁方法里边,哎,我们定义一些代码啊,特别是我们来写那些数据源,我们在配置数据源的时候,初始化的时候呢,我们要做很多的事情,要复制啊,要有很多的这个属性赋值啊,销毁的时候呢,我们也要把这连接等等数据源都关闭,所以说呢,在这些自定义的生命周期里边,哎,我们就可以来做这些事情,这是我们说的第一种,哎,我们通过啊,通过按特宾注下。
07:28
And并注解指定初始化和销毁方,那么呢,我们这个初始化,初始化它在什么时候调用呢?啊,它就在啊对象创建完成并赋制好,比如说如果你这个对象里边有一些属性,这属性也都复制好以后,然后呢调用咱们这个初始化方法。哎,这是呢,我们这个初始化的时机,那么这咱们这个销毁,销毁什么时候调用呢?那就是在容器关闭的时候进行销毁,但是大家注意啊,如果我们把这个being,我要把它的这个school我调成prototype,也就是说呢,我们是多实例的情况下,我们看初始化跟销毁什么时候执行。
08:22
首先来看初始化会不会执行呢?走哎,不会执行,因为我们说了这个B应多实例必应,你在获取的时候才创建对象,所以说呢,哎,获取。Get,我们来获取这个卡。当我们在获取这个卡的时候,我们来测试。哎,这个卡会创建对象并进行初始化,但是销毁呢,大家看啊,多实例的B是不进行销毁的,就是呢,你每次获取IOC容器帮你创建出对象交给你,要什么时候销毁,那这是你自己的事,我们。
09:04
这个容器中就不管理这些多实力鼻音啊,我们说说一下这个特殊单实力鼻应是在容器关闭的时候进行销毁,而多实力的B是咱们这个容器不会管理这个B。比如说呢,你要这个B的时候,容器帮你创建,但是容器不会管理这个B,所以说呢,容器不会调用消毁方法,这个呢,这个时候呢,你就可以手动的来调它的销毁方法,这是我们说的第一种方式,我们通过艾特并注解指定初始化和销毁,以及初始化和销毁调用到这些时机,好把这个scope呢就来除掉啊,如果是多实地的情况,大家一定注意。
我来说两句