2011-06-07 70 views
0

我無法理解以下snipet。我的意思是發生了什麼。任何人都可以解釋我發生了什麼?以下代碼片段中發生了什麼?

這是片段:

protected NodeService getUnprotectedNodeService() 

    { 

     if (this.unprotectedNodeService == null) 
      { 
     this.unprotectedNodeService = (NodeService) FacesHelper.getManagedBean(FacesContext.getCurrentInstance(), "nodeService"); 
     } 
     return this.unprotectedNodeService; 
    } 
+0

看起來像是單身。 – Kevin 2011-06-07 09:33:20

回答

3

它集this.unprotectedNodeService,如果它沒有被設定(也返回吧..),如果它已經被設置,它只是返回。
似乎是一個緩存機制,以防止調用重方法,曾多次

+0

實際上它返回'this.unprotectedNodeService'在任何情況下 – MarcoS 2011-06-07 09:35:30

+0

@MarcoS:我忘了寫在答案的第一個'版本',但我立即編輯它...查看編輯答案。 – amit 2011-06-07 09:38:09

+0

對不起:我必須看到你的答案的第一個版本:) – MarcoS 2011-06-07 09:42:32

0

如果unprotectedNodeService實例變量沒有設置,它的仰視下的「nodeService」鍵存儲在範圍ManagedBean。如果它不存在,它將被創建。它被鑄造成一個NodeService對象並返回,並被設置爲實例變量。這必須來自JSF應用程序。查看faces-config.xml或相關@ManagedBean註釋以查找更多信息。

+0

謝謝你瓊斯。這真的很有用 – 2011-06-07 09:38:37

1
  • 如果this.unprotectedNodeService是 空,一個bean被查找和存儲在 this.unprotectedNodeService
  • this.unprotectedNodeService從函數返回。

這是lazy initialization的一個例子。

0

這是懶惰初始化模式。

字段unprotectedNodeService在首次使用時(而不是在之前)被初始化。

請注意,此代碼不是線程安全的。

相關問題