spring bean的作用域

1:单例   singleton

singleton类的构造方法私有化,通过InstanceHolder 静态内部类,持有单例对象,这样就可以起到惰性初始化,最后提供一个全局的访问点,可以使单例的实例对象可以获取。

spring bean的作用域

默认情况下,spring创建一个bean是单例。就说说只会创建一个bean的节点,其他调用的bean都是同一个。需要注意的是,spring默认的单例创建bean是在创建容器时就已经创建好,和多例是不一样的

 

 

在xml中配置一个bean

spring bean的作用域

得到两次bean,显示的结果为true,说明两次创建的bean是同一个,说明spring默认的创建方式是单例的。

spring bean的作用域

 

    scope="singleton"  spring创建bean默认是单例的. 创建容器时就已经创建好
    scope="prototype" 可以为原型的,意思是每次创建一个bean,spring容器会创建一个新的bean实例

 

 

【对于单例实现的原理,其实就是spring提供了一个缓存池,在创建容器时,可以将创建的bean缓存入bean的缓存池,对于获取bean的方式其实是通过注册表 首先将需要单例的实例通过唯一键注册到注册表,然后通过键来获取单例,】

 

2:多例 prototype  指每次向Spring容器请求获取Bean都返回一个全新的Bean,相对于“singleton”来说就是不缓存Bean,每次都是一个根据Bean定义创建的全新Bean。

spring bean的作用域

Spring不会缓存原型对象,而是根据Bean定义每次请求返回一个全新的Bean:

 

 

 

spring bean的作用域

如果运行上面的代码,结果为false,说明两次创建的bean是不同的对象