1、Spring支持bean的六种作用域,如果使用AppliactionContext的话,只可以使用5种。
---- singleton:(默认)每一个Spring IOC容器单个bean定义只能产生一个对象实例。
---- prototype:单个bean定义可以创建任何数量的定义。
---- request:单个bean定义的创建实例的作用域是一次Http request请求。
---- session:单个bean定义的创建实例的作用域是session的生命周期。
---- application:单个bean定义的创建实例的作用域是ServletRequest的生命周期。
---- websocket:单个bean定义的创建实例的作用域是websocket的生命周期。
2、使用singleton时,单个bean只管理一个共享实例,当根据配置文件创建bean之后,这个单独的实例,存储在单个bean的缓存中。任何对这个bean的请求和引用都会返回那个缓存的对象。
single示意图3、非单例模式,bean部署采用原型作用域时,每次产生一个bean的创建的请求时,都会创建一个新的bean的实例。
4、与其他作用域相比,Spring不管理prototype bean的生命周期,容器初始化,配置,组装原型对象,传递给客户端。使用prototype bean的时候,要注意,释放对象,因为spring不会管理bean的销毁工作。
5、request session application websocket 都是由ApplicationContext实现,由正规的IoC容器ClassPathXmlApplicationContext来使用这些作用域,会抛出IllegalStateException异常。
6、request作用域注解:@RequestScope
session作用域注解:@SessionScope
application作用域注解:@ApplicationScope
7、当把将不同作用范围的bean注入时,可以使用代理完成这一项工作。
8、当将propertyScope的bean声明为<aop:scoped-proxy/>时,每个在共享代理的方法调用都会引起一个新目标实例的创建。
9、<aop:scoped-proxy/>默认为CGLIB代理。
10、通过配置<aop:scoped-proxy/>标签的proxy-target-class="false"属性,来配置jdk代理,但是这时候需要有接口存在。
11、通过实现org.springframework.beans.factory.config.Scope接口
重写其中的方法,在使用的过程中要先创建当前自定义scope实例,然后通过BeanFactory的registScope() 方法对当前作用域命名和注册。
网友评论