如何获得iPOJO的财产

时间:2016-01-21 18:19:18

标签: 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="test.Test@637a91a"

如何获得"缓冲"财产通过"内省"来自另一个组件?我想得到" abcbuffer"值。

谢谢,

3 个答案:

答案 0 :(得分: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);
    }

}

答案 1 :(得分:0)

为了动态更新缓冲区值,我们使用:

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

答案 2 :(得分:0)

所有iPOJO组件都包含一个架构处理程序。 您可以通过Architecture服务跟踪此体系结构处理程序,并使用它来内省组件。它是目前我记得的实例命令所做的事情。