2016-01-21 88 views
0

我有一個簡單的組件,如下所示:如何獲得財產iPOJO

@Component (name="Test") 
@Instantiate 
public class Test { 
    @Property(name="foo", value="my-instance-2") 
    String buffer = "abcbuffer"; 
    public Test() { 
     System.out.println("test running"); 
    } 
} 

我使用了「實例ITEST」我有結果

g! instance iTest 
instance name="iTest" state="valid" bundle="31" component.type="Test" 
     handler name="org.apache.felix.ipojo:properties" state="valid" 
       property name="foo" value="abcbuffer" 
     handler name="org.apache.felix.ipojo:callback" state="valid" 
     handler name="org.apache.felix.ipojo:architecture" state="valid" 
     object name="[email protected]" 

如何我得到「緩衝」屬性通過「自省」從另一個組件?我想獲得「abcbuffer」值。

感謝,

回答

0

爲了應對這個問題,我做如下:

for (Factory factory : factories) { 
     if (factory.getName().equals("Test")) { //Test is default name of a component name 
      InstanceManager im = (InstanceManager) factory.getInstances().get(0); 

      String buffer = (Strig) im.getFieldValue("buffer"); 

      System.out.println(buffer); 
    } 

} 
0

,並動態更新緩存值,我們使用:

  ComponentInstance ci = (ComponentInstance) factory.getInstances().get(0); 
      Properties props = new Properties(); 
      String newbuffer = new String("newValue"); 
      props.put("buffer", newbuffer); 
      ci.reconfigure(props); 
0

所有iPOJO組件用一個架構處理程序包裝。 您可以通過架構服務跟蹤此體系結構處理程序,並使用它來反思組件。如果我記得,它現在是實例命令的功能。