【问题标题】:How to get property in iPOJO如何在 iPOJO 中获得财产
【发布时间】:2016-01-21 18:19:18
【问题描述】:

我有一个简单的组件如下:

@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”值。

谢谢,

【问题讨论】:

    标签: ipojo


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      为了回答这个问题,我做如下:

      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);
          }
      
      }
      

      【讨论】:

        【解决方案3】:

        所有 iPOJO 组件都使用架构处理程序进行包装。 您可以通过架构服务跟踪此架构处理程序,并使用它来内省组件。如果我记得的话,这就是当前实例命令所做的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-14
          • 2019-01-03
          • 1970-01-01
          • 2020-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多