Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java osgi声明性服务的控件实例化_Java_Osgi_Factory_Declarative Services - Fatal编程技术网

Java osgi声明性服务的控件实例化

Java osgi声明性服务的控件实例化,java,osgi,factory,declarative-services,Java,Osgi,Factory,Declarative Services,我正在寻找一种简单的方法来控制声明性服务的实例化 我想要的是一个类似于工厂的东西,它被要求返回一个组件的实例,但我可以在那里控制实例化 目前我刚刚找到了ComponentFactory,在那里我可以使用给定的字典调用newInstance。但我真正想要的是这样的,假设IComponent是声明性服务接口,MyComponent是实现类 public class MyComponentFactory implements ? { public IComponent newInstance(

我正在寻找一种简单的方法来控制声明性服务的实例化

我想要的是一个类似于工厂的东西,它被要求返回一个组件的实例,但我可以在那里控制实例化

目前我刚刚找到了ComponentFactory,在那里我可以使用给定的字典调用newInstance。但我真正想要的是这样的,假设IComponent是声明性服务接口,MyComponent是实现类

public class MyComponentFactory implements ? {

   public IComponent newInstance() {
       return new MyComponent("firstParameter", "secondParameter");
   }
}
声明性服务是否有类似的功能,或者我是否需要在捆绑激活代码中使用自己的服务注册


提前感谢

DS不提供您正在寻找的间接实例创建级别。DS将始终使用public no args构造函数,然后调用指定的activator方法来完成实例初始化。

DS不提供您正在寻找的间接实例创建级别。DS将始终使用public no args构造函数,然后调用指定的activator方法来完成实例初始化。

此类服务实例化控制的一种替代方法是使用DS和CM的组合

您必须在DS xml中设置configuration policy=“require”,并使用CM创建一个配置实例,该实例将用于将包含您需要的所有属性(当然只有DS支持的类型)的字典传递给所创建的服务实例。您甚至可以使用property文件和Felix文件安装来完成该配置


如果这还不够,您还有另一种选择,即跟踪新创建的服务,并在添加使用CM的配置后调用设置(args)方法。

此类服务实例化控制的一种选择是使用DS和CM的组合

您必须在DS xml中设置configuration policy=“require”,并使用CM创建一个配置实例,该实例将用于将包含您需要的所有属性(当然只有DS支持的类型)的字典传递给所创建的服务实例。您甚至可以使用property文件和Felix文件安装来完成该配置


如果这还不够,您还有另一种选择,即跟踪新创建的服务,并在使用CM添加配置后调用设置(args)方法。

谁控制实例化?即,谁将调用
newInstance
?服务消费者?或者您希望框架自动执行此操作;如果是这样,那么在什么时间/事件?当需要服务实例时,框架应该自动执行。i、 服务消费者向OSGI服务注册中心请求服务“IComponent”。但DS已经这样做了。它根据服务消费者的第一个需求创建组件。我知道,这是我的问题。框架强制使用0参数构造函数。我想可能有办法,所以框架会说:“我需要一个新的组件,我将实例委托给你的特殊类”客户机+字典有什么问题?或者,如果这些参数是静态编码的,为什么不将它们移动到调用参数化构造函数的零参数构造函数中?谁控制实例化?即,谁将调用
newInstance
?服务消费者?或者您希望框架自动执行此操作;如果是这样,那么在什么时间/事件?当需要服务实例时,框架应该自动执行。i、 服务消费者向OSGI服务注册中心请求服务“IComponent”。但DS已经这样做了。它根据服务消费者的第一个需求创建组件。我知道,这是我的问题。框架强制使用0参数构造函数。我想可能有办法,所以框架会说:“我需要一个新的组件,我将实例委托给你的特殊类”客户机+字典有什么问题?或者,如果这些参数是静态编码的,为什么不将它们移动到调用参数化构造函数的零arg构造函数中呢?因此,对于组件的n-arg构造函数来说,似乎不可能是正确的。DS不支持构造函数注入。它支持activate、modified和deactivate方法来注入配置,并支持bind和unbind方法来注入依赖项。因此,对于组件的n-arg构造函数来说,似乎不可能是正确的。DS不支持构造函数注入。它支持activate、modified和deactivate方法来注入配置,并支持bind和unbind方法来注入依赖项。