簡體   English   中英

使用包和名稱從實例獲取dependecy實例

[英]Get dependecy instance from instance with package and name

假設我有實例A,其中我與實例B和C有依賴關系.B和C也有與B1和C1的依賴關系

可以使用反射和包字符串作為“B.B1”和“C.C1”從A獲取那些實例。

它會是這樣的

          B1 b1 = A.getMagicallyTheInstance("B.B1");
          C1 c1 = A.getMagicallyTheInstance("C.C1");

您可以使用java反射或OGNL來實現。 OGNL用於對象圖表符號語言及其想要使用的符號。 但是如果你想使用反射,你必須遵循這些步驟。

  1. 得到A的領域
  2. 從A的字段中提取B並將其作為對象。
  3. 得到B的領域
  4. 從B的字段中提取B1並獲取作為對象。
  5. 對C和C1重復2-4。

順便說一句, getResourceAsStream用於讀取類路徑資源作為inputStream。 據我所知,它注意到反思。

但在OGNL中它更簡單。

  1. 使用現有對象構建上下文。 就像A一個例子
  2. 使用此上下文執行圖表表示法。 要獲得B1,您可以使用“abb1”之類的東西

就這樣。

更新

我剛剛意識到你的Spring標簽。 您可以輕松地使用Spring EL實現它。 這是一個例子:

    ExpressionParser parser = new SpelExpressionParser();
    Expression exp = parser.parseExpression("b.b1");
    // I Assume A has a field name b, and B has a field name b1
    B1 b1 = (B1) exp.getValue(aInsantece);

正如bhdrkn所建議的那樣,OGNL可能就是這樣。

但是,如果您想使用純反射,您可以執行以下操作:

Container instance = new Container();
Class<? extends Container> klass = instance.getClass();
Field field = klass.getField("value");
String actualValue = (String) field.get(instance);

Container看起來像這樣:

public class Container {
    public String value = "default";
}

暫無
暫無

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

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