簡體   English   中英

帶注釋的依賴注入

[英]Dependency Injection With Annotations

我想基於Java注釋構建我自己的自定義DI框架,我需要一些方向來開始。 我知道使用諸如guice或spring之類的許多精彩框架之一會更容易,但為了我自己的好奇心,我想建立自己的框架。

我對注釋不是很熟悉,所以我在查找資源方面遇到了一些麻煩,並且非常感謝有人說出了我需要采取的一些步驟來開始。

如前所述,id喜歡采用工廠方法並以某種方式使用@Resource或@Injectable類型注釋標記我的getter,然后在我的業務類中能夠使用@Inject注釋設置我的變量依賴項並使資源自動可用。

有沒有人可以傳遞任何類型的資源來幫助我理解基於注釋標記方法的過程,然后根據注釋從單獨的類中檢索值。 我需要一點方向,讓我開始。 當然,一旦我開始,我會很高興在這里發布一些代碼示例,以便其他人今后閱讀。

編輯

我用來將這些資源放在一起的資源:

Java反射:注釋

如何在給定的包中找到注釋:Stack Overflow?

在運行時掃描注釋

我還沒有寫完這篇文章,但基本的任務列表將如下(對於任何可能有興趣在將來做類似事情的人)

  1. 在類運行時掃描所有@Inject字段並獲取對象類型。

  2. 掃描所有類(或只是一個特定的類包(我還沒有決定))注釋方法@InjectableResource。

  3. 循環所有帶注釋的方法,找到返回我正在尋找的對象類型的方法。

  4. 運行該方法並獲取依賴項。

另外請注意,在掃描所有類時,我將使用名為Javassist的庫。 基本上它的作用是允許我讀取每個類的字節碼信息而不實際加載類。 所以我可以讀取注釋字符串而不會產生嚴重的內存問題。

有趣的是你想​​建立自己的。 我喜歡Google Guice - 它使代碼如此優雅和簡單。

我已經使用過本指南,之前我發現它對於學習注釋非常有用,以及如何將它們從類和方法中拉出來。

您必須使用@interface定義自己的注釋。 然后你必須定義某種類來進行綁定,例如你在這個具體類中看到一個接口綁定。 最后,你需要一些邏輯來完全拉它,例如遍歷每個類,找到每個注釋,然后找到合適的綁定。

通過Reflections和singletons來考慮懶惰的實例化。 例如,Guice允許您使用單例,因此您只使用具體類的一個實例,或者每次都可以綁定一個新版本。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM