2011-09-20 13 views
2

現時点では私はAutowiringmyServiceで、私のアプリのさまざまなオブジェクトにうまくいきます。@サービスを第三者のライブラリにオートワイヤリングする問題

@Autowired 
private MyService myService; 

この設定を使用して:

<context:component-scan base-package="com.myapp.mypackage" /> 

はしかし、私は、サードパーティのライブラリを追加し、また、そのパッケージ内のいくつかのオブジェクトにAutowiremyServiceにしたいが、それは働いていないました。

私は私のコンポーネントスキャンにこの変更を行ったが、私はサードパーティ製のパッケージでそれをアクセスしようとしたとき、私はmyServiceためNullPointerExceptionを取得しています:

<context:component-scan 
base-package="com.myapp.mypackage, com.thirdparty.thirdpartypackage" /> 

私はこれが働くだろうと思いましたか?あなたは注釈に頼ることができない

<bean class="com.thirdparty.Foo"> 
    <property name="somePropertyWithASetter" ref="myService" /> 
</bean> 

サードパーティのライブラリが最も可能性の高い@Autowiredを使用しないため、:サードパーティのライブラリで

答えて

4

通常のアプローチは、XMLを使用することです。

0

サードパーティ製のパッケージは春が管理されている場合は、その答え

の残りの部分を無視してくださいは、私はあなたが依存性の注入を行う前に、自分自身に尋ねるべき質問は、オブジェクトの春はどちらかということを行うには、管理されていると思いますあなたは春のコンテキストXMLでそれらを定義するかの手でケースに

  1. を見てみましょう(@Component、@serviceスプリングステレオタイプ)

    でオブジェクトに注釈を付けますが、この第三の部分へのアクセス権を持っていますかyソースコード?

  2. サードパーティは依存関係注入を使用していますか?
  3. 上記の質問に対する回答が否定的である場合、これは簡単ではありません。
  4. このサービスオブジェクトは、このサービスが

    パブリッククラスMyServiceで を{注入されていないオブジェクトを協力した場合にも、(春オブジェクトはシングルトンであるため)状態を持っているものならば、のは(MyServiceで)の例を見てみましょう

    //depending on how MyServiceOne is managed makes it hard to retrofit 
        //MyService as a spring bean 
        private MyServiceOne serviceone; 
    
        //this also would have an adverse affect if you try use this as a spring managed 
        //since all spring beans are singleton 
        private String someState; 
    
    
    } 
    
0

あなたが代替としてAdapterパターンを使用してみましたか?私はあなたが@Autowiredをアダプターで使用できると信じています。