Spring Bean的作用域可以通过 @Scope 注解来设置。常见的取值如下:
·singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中同一个名称的bean只有一个实例,也就是单例的。
·prototype:这种范围,表示非单例的。也就是说每一次用到的bean都是一个新的。·request:同一个请求,使用的是同一个bean。会为每一个来自客户端的请求都创建一个实例,在请求完成以后, bean会失效并被垃圾回收器回收。
session:与request 请求范围类似,确保每个session会话范围内,是同一个实例,在session过期后,bean会随之失效。
虽然,bean作用域可以设置这些值,但是在项目开发中,绝大部分的bean都不会添加这个 @Scope 注解,也就是说默认都是用的是单例的bean。
Spring容器的bean什么时候初始化的?
嗯~这个得分情况来看哈。
如果是单例的bean,默认是Spring容器启动的时候,就完成bean的初始化操作,那这是默认情况,我们可以通过 @Lazy 注解来延迟bean的初始化,延迟到第一次使用的时候.而如果是非单例的bean(也就是prototype),则是在每次使用这个bean的时候,都会重新实例化一个新的bean.