Java中bean的作用域
推薦 + 挑錯(cuò) + 收藏(0) + 用戶(hù)評(píng)論(0)
java開(kāi)發(fā)者都會(huì)在實(shí)體對(duì)象的屬性中加上private關(guān)鍵字,而在業(yè)務(wù)類(lèi)對(duì)外發(fā)放的方法中寫(xiě)上public關(guān)鍵字,這并不是習(xí)慣,而是開(kāi)發(fā)者深諳其道,這就是java對(duì)象中filed的作用域。
舉個(gè)例子,你家里的東西,都屬于你家的,家門(mén)前的路是屬于你和鄰居們的,你爸爸的剃須刀是屬于你爸爸的;這就是作用域,分清對(duì)象歸屬權(quán)限的作用。
而在spring容器所管理的組件,也是有作用域的。本章將會(huì)詳細(xì)闡述bean的作用域,以及其和ApplicationContext、bean和beanFactory絲絲縷縷的聯(lián)系。
俗話(huà)說(shuō),授之于魚(yú)不如授之以漁,我們還是通過(guò)源碼來(lái)學(xué)習(xí),希望在這個(gè)過(guò)程大家都能夠有所提升。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scope {
/**
* Specifies the scope to use for the annotated component/bean.
* @see ConfigurableBeanFactory#SCOPE_SINGLETON
* @see ConfigurableBeanFactory#SCOPE_PROTOTYPE
* @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST
* @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION
*/
String value() default ConfigurableBeanFactory.SCOPE_SINGLETON;
/**
* Specifies whether a component should be configured as a scoped proxy
* and if so, whether the proxy should be interface-based or subclass-based.
* 《p》Defaults to {@link ScopedProxyMode#NO}, indicating that no scoped
* proxy should be created.
* 《p》Analogous to {@code 《aop:scoped-proxy/》} support in Spring XML.
*/
ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;
}
在spring容器中,@Scope注解來(lái)聲明實(shí)例的作用域,在源碼中的注釋中有這樣一句話(huà)In this context, scope means the lifecycle of an instance。scope決定了實(shí)例的整個(gè)生命周期。
Scope注解的value值上方的注釋告訴我們,當(dāng)前有四個(gè)值:(高級(jí)版本更新了global session)
SCOPE_SINGLETON,SCOPE_PROTOTYPE,SCOPE_REQUEST,SCOPE_SESSION,下面分別來(lái)看看,這些作用域,有什么不同。
SCOPE_SINGLETON
從源碼中可以看到,該作用域是spring默認(rèn)的作用域。`singleton`想必大家都非常熟悉,沒(méi)錯(cuò),學(xué)習(xí)設(shè)計(jì)模式的時(shí)候第一個(gè)介紹的應(yīng)該就是單例模式,也就是說(shuō),spring中的bean,默認(rèn)情況下都是單例。復(fù)習(xí)下什么是單例:在應(yīng)用中,有且只有一個(gè)實(shí)例。通過(guò)之前的bean管理的學(xué)習(xí)([《spring源碼閱讀2-2——bean的管理》](http://www.jianshu.com/p/3c225fc067a0)),我們知道容器中的單例都會(huì)被注冊(cè)到spring容器中的緩存中,回顧下:
容器中的緩存對(duì)象
這回可以動(dòng)態(tài)運(yùn)行demo代碼,證實(shí)下spring容器對(duì)于bean的管理。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%