我正在开发OSGi(Rev 4)项目,我必须使用karaf注册表。要么我可以将我的实现声明为组件或服务。 ie)我可以使用组件工厂/服务工厂在karaf中注册我的组件/服务,以生成组件/服务的对象。 我有多个类实现,所以对于服务工厂,我希望它可以用单个类实现,即通过注册具有不同属性/过滤器值的相同名称的所有服务。虽然检索服务我可以查询属性,以便只有一个检索类就足够了。 项目结构
\Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE
我使用相同的项目结构在SO中引发了另一个question。任何人都可以告诉我这种情况是否可以通过组件工厂实现,即注册具有不同属性的相同工厂名称 1. Service(interface)
- implementation 1
- implementation 2 (different implemenations)
- ....
2. Factory(register as a component factory)
3. FactoryManager(which produces objects)
并通过属性值检索(目标属性的动态调用)。
以更精确的方式
第一家工厂
(factory="com.java.test.ClassImpl")
第二工厂
@Component(name = "ExampleComponentFactoryServiceProvider", factory = "example.factory.provider")
public class ExampleComponentFactoryServiceProvider implements ExampleFactoryService {
以上是两家注册了相同工厂名称的工厂。我期望注册不同的属性值。 在activate()方法中检索部分
@Component(name = "ExampleComponentFactoryServiceProvider1", factory = "example.factory.provider")
public class ExampleComponentFactoryServiceProvider1 implements ExampleFactoryService {
在上面的代码中,组件工厂尝试通过属性过滤来创建两个不同的实例。但是如果第一个停止,它会创建第一个并创建第二个。如何通过相同的工厂id创建对象,并在运行时生成不同的目标属性。