2016-05-26 16 views
0

私は豆とサービスの概念を完全には把握していないかもしれませんが、すべての私の研究は私を何にも導きません。OSGI - 新しいオブジェクトにBeanを挿入

私のOSGIプロジェクトでは、サービスを提供するAバンドル(myService)が手に入りました。

バンドルBはサービスとして公開されているbean(myBean)でこのサービスを消費します。

青写真で豆とサービス宣言を行っています。

今のところ、バンドルAとBはどちらもKarafによって解決されており、配線は問題ありません。

しかし私のバンドルBにはサービスとして公開されている別のビーン(myOtherBean)があり、新しいオブジェクトを動的に作成します。それらのオブジェクト(MyObjectと呼ばれます)は、beanの参照を持っていなければなりません。

どのように参照を渡すことができますか?

簡単な方法は、私のbean myOtherBeanにリファレンスを入れて、MyObjectのコンストラクタを通して注入することです。しかし、私はそれを行う別の方法があるかもしれないと思っています。 MyObject@Inject注釈を使用するように提案されていましたが、動作させることはできません。

答えて

1

私はコンストラクタでサービスを渡すと、これを行うには良い方法だと思います。ファクトリを使用することは可能ですが、コードでオブジェクトを作成する場合は、青写真工場を使用することは困難です。 これを行うには、青写真のコンテキストを注入して手動でオブジェクトを取得しますが、これはかなり醜いです。

+0

青写真の文脈を注入することは私が避けたいものです。情報のためだけに、DSのような鎮痛剤注入APIの他の種類の方が簡単でしょうか? – jhamon

+0

これはDSで行うことはできません。プレーンなJavaコードを使用してオブジェクトを作成するのはなぜ問題なのですか? –

+0

実際には私の質問に答えてもそれほど問題はありませんが、そのようなことが可能な依存性注入APIがあれば、一般的な知識が不思議でした。 – jhamon

0

あなたは工場パターンを持っていて、作成したBeanを宣言されたBeanに注入したいと思うように聞こえます。正しい?

その場合は、以下を参照してください。https://www.ibm.com/developerworks/library/os-osgiblueprint/

<bean id=”accountFactory” class=“org.apache.geronimo.osgi.AccountFactory”> 
     <argument value=”account factory”/>  
    </bean> 

    <bean id=”accountThree” 
     factory-ref=“accountFactory” 
     factory-method=“createAccount”> 
     <argument value=”3”/> 
     <property name=”description” value=”#3 account”/>  
    </bean> 
+0

あなたのソリューションは私の場合は動作しません。私は豆の工場で終わるつもりですが、私の問題は同じです。私は自分のコードからBeanを取得しません。より正確に言えば、私はデータベースから不特定多数のオブジェクトを取得し、それらのオブジェクトのそれぞれについて、サービスを消費する別のタイプのオブジェクトをインスタンス化する必要があります。 – jhamon

関連する問題