00:00
大家好,我是上硅谷Java意义学科的韩延冰,接下来给大家分享一道面试题,这道题是spring b的作用域之间有什么区别?那么下面呢,我们先了解一下be的作用域。Be的作用域在spring中,可以在病元素的scope属性里设置病的作用域,以决定这个病是单实力还是多实例的。默认情况下,Spring只为每个在IC容器里声明的并竟创建唯一一个实例,也就是说默认情况下spring帮我们创建的对象的是单例的,而且呢,整个IC容器范围内呢都共享该实例。也就是说以后呢,我们调用钙的B方法,或者是用if来引用B呢,都将返回这唯一的一个实例,那这个作作用域啊,叫single to,这是它默认的一个作用域,下面呢,我们来看一下这个表格。Single town,诶,这个是默认值,在small IOC容器中仅存在一个并实例,并以单实例的方式存在,第二个呢,是proty原型的,这个时候啊,IOC容器一创建不再实例化的B,哎,每次调用get b的时候呢,才会返回一个新的实例,而且每调一次会创建一个新的实例。
01:13
第三个是request,诶每次HTP请求会创建一个新的B,但是呢,这个作用力啊,适用于web web application contest这个环境,也就是我们的we部环境session,同一个HP session共享一个B,也就是说在一次绘画里边,我们来创建一个B,不同的这个绘画呢,使用这个不同的B,这个作用于也是适用于web application application context。哎,我们的外部环境好,下面给大家演示一下。来看一下我写的注释,可以通过scope属性来指定B的作用域,那在这块我先把这个呢作用域给删掉,我们看默认是不是single town。Single to是默认值,当IC容器一创建就会创建该B的实例,而且是单立的,每次得到的都是同一个。我们先看一下IOC容器一创建会不会创建这个实例,来,我们打开我们的测试,我把这个代码呢先注掉。
02:04
我来测试一个空的方法。我这时候测试的时候,IC容器上面呢,已经给我创建好了,我们看会不会创建这个B,会不会创建一个不可对象来测试一下。诶来看book对象被创建了,我们的book类里边这个无参的构造器被调用了,就证明给我创建了对象,哎,创建类对象来啊,我们这个看一下,我现在呢,把它把这个配置的B呢s school呢给它指定上。Scope out,斜杠。奥的斜杠来看,嗯,有这四个范围,我们还指定为single看,跟我们刚刚的这个效果一不一样,同样来右键。测试一下,来看一下IOC容器创建,诶B对象已经给我们实例好了,给我们创建好了,那么它是不是单立的呢?我们来测试一下,我从IOC容器里边获取一个book。
03:00
再从FC里边获取一个book来,我们测试一下这两个book是不是同一个,如果是同一个第18行呢,将返回一个处,我们来测试一下。邮件。走。好诶没问题,是出那证明呢,我们拿到的是同一个对象,好,那下面呢,我们来把这个值改成prototype圆形的,当IOC容器一创建不再实例化这个B音,那什么时候实例化呢?每次调钙的B方法时再实例化,而且呢,调用一次会创建一个对象,好来把它改掉。好的,斜杠。改成prototype保存好,现在呢我们再来测试,我现在呢把这个给注释掉,注释掉之后我们来测试一下IOC容器一创建看还给我。创建。对象嘛,来看一下啊,测试一次。IC用创建,你发现控制台呢,并没有打印构造器里边那一句话,也就是说我们这个book对象的这个无参的构造器并没有被调用,那什么时候调用呢?
04:08
每次调用get b方法的时候,这块说了啊,每次调用它的时候会实例化B,也就会给我们创建一个对象,而且呢,每调一次会创建一个新的来我们来。把这个注释呢给打开,现在呢,调用一下get的B方法,17行呢,又调了一下B方法,我们说每调一次创建一个,每调一次创建一个,也就意味着我们的无三勾造就会被创建,会被调用两次,我们来看一下是不是啊,那如果是调用了两次,会创建两个不同的对象,那18行的应该是一个force,我们来看一下。邮件。走。哎,来看无参的构造器被调用了两次,证明了创建了两个不同的对象。最后呢,Book等于BOOK2返回的是false,就证明了这两个对象不是同一个,诶这是这个第二个范围叫pro tap原型的,那第三个request和session request就是每次发请求的,我给实例化一个,Session呢,就是在一次绘画里边共享一个B,那这个呢,我们现在是Java环境,哎,我在这呢就不给大家测了啊,这个只有在外部环境下才才。
05:18
使用好,这是我们这个spring b的一个作用语之间的区别,一共有这四个范围,给大家介绍到这里。
我来说两句