【问题标题】:Programmatically create ipojo component instances when user request用户请求时以编程方式创建 ipojo 组件实例
【发布时间】:2013-11-26 23:29:40
【问题描述】:

使用 Apache Felix 4.2.1 iPOJO 1.11.0。

需要在用户请求时以编程方式创建组件实例。但是我不能在静态工厂方法中使用非静态字段。

@Component
@Provides(specifications = {IProcessSearch.class})
public class ProcessSearch implements IProcessSearch {
    ...
    @Requires(filter = "(factory.name=ProcessSearch)")
    private Factory mProcessSearchFactory;
    ...
    /**
     * Factory methods for receive new component instance:
     */
    public static ProcessSearch createInstance() {
        return createInstance(null);
    }
    public static ProcessSearch createInstance(Properties pProperties) {
        InstanceManager lInstanceManager = (InstanceManager) mProcessSearchFactory.createComponentInstance(pProperties);
        return (ProcessSearch) lInstanceManager.getPojoObject();
    }

1) 如果我理解正确,那么带有 @Requires 注释的字段不能是静态的。如何创建获取属性并接收新组件实例的工厂方法?

2) 这样做是正常的做法吗?

【问题讨论】:

    标签: java apache-felix ipojo


    【解决方案1】:

    这样做,您需要提供自己的创作策略。此策略应用于提供的服务 (@Provides) 而不是消费者端 (@Requires)。

    更多信息:http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/providing-osgi-services.html#service-serving-object-creation

    【讨论】:

    • 策略 - 定义服务提供策略(为所有捆绑包提供一项服务或为每个捆绑包或自定义提供新服务......)(或者我弄错了吗?)。但我需要创建实例。您能否提供示例代码(或提供示例链接)如何在消费者端使用自定义 CreationStrategy?例如 - 我需要创建 MyService 组件的 n 个(用户输入 n 个)实例。用户输入 n 后需要以编程方式创建所有实例。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-05-28
    • 2021-01-22
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多