1.Scope常见的5种模式
singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效
globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效
2.Scope中也可以指定代理类 proxyMode=ScopedProxyMode.INTERFACES
在xml中指定时将proxy-target-class="false" 则使用接口代理
使用代理时 即使是prototype因为代理对象是单例的 所以直接比较注入对象的hash值也是一样的
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Scope("prototype")
<bean id="cd2" class="com.sp.sp2.SgtPeppers2" c:cons-ref= "hwConstant" c:cons2-ref= "hwConstant2" scope="prototype"/>
@Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE,proxyMode=ScopedProxyMode.INTERFACES)
<bean id="cd2" class="com.sp.sp2.SgtPeppers2" scope="prototype">
<aop:scoped-proxy proxy-target-class="false"></aop:scoped-proxy>
</bean>