2015-10-15 3 views
7

Java 8では、インタフェースでメソッド実装を提供できる新しい機能が追加されました。 メソッド本体内で使用できるインターフェイスにBeanを挿入できる方法はありますか?以下 これは少しトリッキーですが、あなたはどのような要件のためのインターフェイス内の依存関係が必要な場合は、それが動作するサンプルコードJava 8とSpring 4:インタフェースでオートワイヤリングを使用

public interface TestWiring{ 

@Autowired 
public Service service;// this is not possible as it would be static. 
//Is there any way I can inject any service bean which can be used inside testWiringMethod. 
default void testWiringMethod(){ 
    // Call method of service 
    service.testService(); 
} 
} 
+3

インターフェイスをインスタンス化することはできません。あなたはそれにフィールドをオートワイヤリングしますか? – Tunaki

+0

私のメソッド本体の中でスプリングマネージドサービスを使いたいです。 1つの方法はApplicationContext.getbean( ")メソッドを使用することですが、私はSpringで管理されたBeanをインジェクションに利用することができるSpring 4の機能を探しています。インタフェースはいくつかのBeanによって実装されるでしょう。 –

+0

DIはSpringのコンストラクタ(コンストラクタインジェクション)やプロパティ(セッタインジェクション)の依存関係を設定することで動作します。コンストラクタもインスタンス変数もありません(インタフェースで宣言した変数は 'static final'です)、何も挿入する方法はありません。 – Ruben

答えて

7

です。

考えられるのは、実装されたクラスが強制的にautowireする依存関係を提供するメソッドを宣言することです。

このアプローチの悪い面は、あまりにも多くの依存関係を提供したい場合、各依存関係に対して1つのゲッターが必要なのでコードがきれいではないということです。

public interface TestWiring { 

    public Service getService(); 

    default void testWiringMethod(){ 
     getService().testService(); 
    } 

} 


public class TestClass implements TestWiring { 

    @Autowire private Service service; 

    @Override 
    public Service getService() { 
     return service; 
    } 

} 
関連する問題