Osgi iPOJO@Bind/@Unbind方法允许的签名

Osgi iPOJO@Bind/@Unbind方法允许的签名,osgi,ipojo,blueprint-osgi,Osgi,Ipojo,Blueprint Osgi,在我所看到的所有iPOJO示例中,@Bind和@Unbind回调仅将服务实例作为参数,即 // @Requires // private Foo foo; @Bind public void bindFoo(Foo foo) { ... } @Unbind public void unbindFoo(Foo foo) { ... } 蓝图 public void bindFoo(ServiceReference){…} 公共void bindFoo(Foo-Foo,映射属性){…} iP

在我所看到的所有iPOJO示例中,
@Bind
@Unbind
回调仅将服务实例作为参数,即

// @Requires
// private Foo foo;

@Bind
public void bindFoo(Foo foo) { ... }

@Unbind
public void unbindFoo(Foo foo) { ... }
蓝图

public void bindFoo(ServiceReference){…}
公共void bindFoo(Foo-Foo,映射属性){…}

iPOJO回调是否也可以访问服务属性或
ServiceReference
?或者应该用于此目的?

回调可以具有以下签名之一:

  • 没有任何参数:该方法只是一个通知(method())
  • 对于服务对象:对象是被牵连的服务对象 (方法(服务svc))
  • 使用OSGi服务引用:服务 引用出现或消失(方法(服务引用))
  • 使用服务对象和OSGi服务引用 (方法(服务svc、服务参考ref))
  • 将服务对象和服务属性放在映射(方法(服务svc,Map)中 物业(
  • 使用字典中的服务对象和服务属性(方法(服务svc,字典属性))
  • 因此,我们支持:

    @Bind
    public void bind() { ... }
    
    @Bind
    public void bind(Service svc) { ... }
    
    @Bind
    public void bind(ServiceReference ref) { ... }
    
    @Bind
    public void bind(Service svc, ServiceReference ref) { ... }
    
    @Bind
    public void bind(Service svc, Map properties) { ... }
    
    @Bind
    public void bind(Service svc, Dictionary properties) { ... }
    
    因此,访问服务属性没有问题。除非您真的需要ServiceReference,否则最好不要使用这个OSGi特定的对象(减少可测试性)

    @Bind
    public void bind() { ... }
    
    @Bind
    public void bind(Service svc) { ... }
    
    @Bind
    public void bind(ServiceReference ref) { ... }
    
    @Bind
    public void bind(Service svc, ServiceReference ref) { ... }
    
    @Bind
    public void bind(Service svc, Map properties) { ... }
    
    @Bind
    public void bind(Service svc, Dictionary properties) { ... }