记录一下。

一、知识点

(1)scope=”singleton”

spring里的bean默认是单例的,实例化后得到的都是相同的对象。

运行结果:

可以发现god1和god2就是同一个对象。

为什么呢?因为默认情况下spring里的bean是单例的,也就是scope=”singleton”。

这样的bean实例化出来的对象全部都是相同的。

(2)scope=”prototype”

这样的我们每次请求ioc容器的时候都会产生一个新的bean。

再次运行main.java,结果为:

这样两个bean就不再是相同的对象了。

(3)spring创建bean的流程

改写一下程序:

改回默认的单例状态。

加上构造器god()。

运行结果:

可以看到god()只被执行了一次。

如果改写main.java

只创建容器。

那么运行结果如下:

可以发现,在默认情况下(singleton),在创建容器的时候,bean已经被装载好了,以后每一次从容器里获取这个bean都返回已经创建好的这个bean,在整个容器的生命周期里,请求的都是这个bean。

现在再次改成scope=”prototype”:

运行没有输出任何结果,bean没有被创建。

在原型状态(prototype)下,只有bean被请求时才会被创建,每个bean都是新的bean实例,在创建容器的时候并不会创建bean。

(4)scope的另外两个属性:requset和session

用得很少,懒得解释了…

二、总结

需要重点关注一个bean的生命周期,什么时候产生,是单例还是多例。

发表评论

电子邮件地址不会被公开。 必填项已用*标注