php cdi
在我有關cdi的
在學校裡,您可能被教導要為每個元件建立乙個班級。 例如,如果您的應用程式有4個按鈕(北,東,南和西),則將有4個類。 每個類都可以在建構函式中或在其他方法中配置其標籤,其圖示及其操作。
在cdi中,您可以使用@postconstruct注釋此類方法,以便容器在建構函式之後立即呼叫它。以swing為例,將產生以下**:
public
class
northbutton
extends
jbutton
...}
常見的行為和屬性可以分解為乙個超類,因此最終有5個類。
在任何物件導向的語言中,使用正確數量的類非常重要:
恕我直言,這兩個都是不為每個例項化元件建立單個類的很好的理由。
邏輯上的第二個步驟是建立產生正確例項的方法。 在我們之前的示例中,這將意味著乙個工廠類,它具有4種方法來生成按鈕,每個按鈕乙個,並且可能是具有共同行為的第五種方法:
public
class
componentfactory
...}
請注意,您仍然需要為每個單個元件新增注釋:
@retention
(retentionpolicy
.runtime
)@target
()@qualifier
public
@inte***ce
north
{}
在我們的例子中,這就是@north
,@east
,@south
和@west
。 如果在整個應用程式中都找到了這些元件,則很好(例如「取消」按鈕)。 如果沒有,您仍然為每個元件都有乙個類(注釋在編譯時會轉換為類)。
cdi不僅讓您從註解型別而且從它們的某些(或全部)元素中限定注入。 因此,我們可以大大減少所需注釋的數量。 為此,只需在此模型上建立乙個注釋:
@retention
(retentionpolicy
.runtime
)@target
()@qualifier
public
@inte***ce
typename
現在,工廠方法變為:
public
class
componentfactory
...}
儘管此方法滿足我們對類(和註解)數量的要求,但它仍然存在乙個主要缺點:現在,方法的數量已大大增加。 儘管缺點不如許多類那麼大,但它使**的可讀性和維護性降低。
cdi使您可以將注入點引數用於生產者方法。 該引數包含有關注入點的大量資訊,請猜測是什麼.... 這些資訊包括:
後一點是驅動下一步發展的因素。 這意味著您可以注釋您的注入點,然後在生產者方法執行期間獲取那些注釋。 在我們的例子中,我們可以為每個要設定的屬性(文字,圖示和操作)新增乙個注釋。 讓我們建立這樣的注釋:
@retention
(retentionpolicy
.runtime
)@target
()public
@inte***ce
text
可以按以下方式在生產者方法中使用此類注釋:
public
class
componentfactory
// set icon
// set action
return
button;}
}
現在,您唯一需要做的就是像這樣注釋按鈕字段:
public
class
***
這將為我們提供乙個帶有「 north」標籤的按鈕。 而且沒有什麼可以阻止您對圖示和操作執行相同的操作。
morevover,僅需文字,您就可以走得更遠並管理國際化:
@retention
(retentionpolicy
.runtime
)@target
()public
@inte***ce
text
此注釋也可以重用於管理文字的其他元件,例如標籤。
使用cdi沒有正確或錯誤的方法。 但是,後一種方法具有最強大的優點。 此外,它還使您可以在乙個地方編寫與元件型別相關的**。 這是我到目前為止所走的路,對此我感到非常滿意。
翻譯自:php cdi
bufferedReader進一步理解
public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...
Looper Handler進一步學習
package com.test.looper import android.os.bundle import android.os.handler import android.os.handlerthread import android.os.looper import android.os....
進一步了解Makefile
mkdir p add src 一層一層建立目錄。touch add makefile 建立 makefile include 目錄中存放標頭檔案。scripts 存放指令碼檔案。存放方式 按照核心管理原始碼來管理。為什麼學習makefile?編譯大型專案 讀懂別人的開源 找到程式入口 看專案的順序...