您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶(hù)?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

Java中bean的作用域

大?。?/span>0.3 MB 人氣: 2017-09-25 需要積分:1

  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容器中的緩存中,回顧下:

  Java中bean的作用域

  容器中的緩存對(duì)象

  這回可以動(dòng)態(tài)運(yùn)行demo代碼,證實(shí)下spring容器對(duì)于bean的管理。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶(hù)評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?