0

コンポーネントファクトリを使用して複数の一意のインスタンスを作成し、サービスファクトリーであるサービスを使用して複数のインスタンスを作成しています。私の構造は TInterface - interface/service TInterfaceInline - のように見えます - これは TInterface を実装し、別のサービスの @Reference から構成されています。
Tinterfaceimpl1 - フィルタ プロパティを持つサービス ファクトリである TInterfaceInline を拡張します。TConsumer - @Reference で取得することによって TInterfaceInline を消費するコンポーネント ファクトリ。

TConsumer

@Component(name = "TConsumer", factory = "TConsumer")
@Service
public class TConsumer implements IConsumer {

    // @Reference(bind = "bindInterface1", unbind = "unbindInterface1", target =
    // "(className=Interface)")
    // private Tinterface interface1;

    @Reference(referenceInterface = ParentProfile.class, bind = "bindInterface11", unbind = "unbindInterface11", target = "(className=interface1)", policy = ReferencePolicy.STATIC, cardinality = ReferenceCardinality.MANDATORY_UNARY)
    private ParentProfile interface11;

    @Activate
    public void activate(BundleContext aBundleContext) {
        System.out.println("Object = " + interface11);
    }

    protected void bindInterface11(ParentProfile interface11) {
        this.interface11 = interface11;
        System.out.println("ref object11 created");
    }

    protected void unbindInterface11(ParentProfile interface11) {
        interface11 = null;
    }

TinterfaceImpl

@Component(name = "TInterfaceImol")
@Service(serviceFactory = true,value=ParentProfile.class)
@Properties(value = { @Property(name = "className", value = "interface1") })
public class Tinterfaceimpl1 extends TinterfaceInline  {

    public Tinterfaceimpl1() {
        System.out.println("Generalprofile class : " + this);
    }
}

Tinterfaceインライン

@Component(name = "TinterfaceInline ")
@Service
public class TinterfaceInline implements java.io.Serializable, ParentProfile {
    // @Reference(bind = "bindtestin", unbind = "unbindtestin", cardinality =
    // ReferenceCardinality.MANDATORY_UNARY, policy = ReferencePolicy.STATIC)
    public Testint testin;

    protected synchronized void bindtestin(Testint inter) {
        this.testin = inter;
        System.out.println("Profile Class : binded parameterresolver " + testin);
    }

    protected synchronized void unbindtestin(Testint inter) {
        this.testin = inter;
    }

}

親クラス

@Component(name = "PResolver")
@Service
public class ProfileClass implements Testint {
    public ProfileImpl() {
        System.out.println("Parameter class impl  : which extends ");
    }
}

これとは別に、残りのものはマーカー インターフェイスです。karaf にインストールしようとすると、Tinterfaceimpl1 の状態が REGISTERED になります。つまり、私はサービスファクトリーを使用しており、コンポーネントファクトリーからサービスファクトリーにアクセスしています。Servicefactory クラスは、Interface を実装するクラスを拡張します。Tinterfaceimpl1 が登録されている理由は何ですか。

4

0 に答える 0