2

スーパークラスが実行されるインターフェースの実装を提供するためにサブクラスを必要とするスーパークラスがあります。

Spring と DI を使用しているため、単に new で実装を作成することはできません。

サブクラスは、Spring が初期化された後にのみ提供する Bean を認識するため、スーパー コンストラクターの使用は機能しません。

@PostConstructまた、サブクラスの開発者がスーパークラスのセットアップ方法を知る必要があるため、サブクラスでq setup メソッドを使用したくありません。

メンバーをセットアップできるように、スーパークラスがサブクラスに実装 Bean への参照を提供するように要求する必要があります。


スーパークラスは UrlBuilder インターフェイスを使用します。

public class JsonConnection{

    private UrlBuilder urlBuilder;
}

サブクラスは、UrlBuilderFacebook依存性注入を介して実装 ( ) を提供します。

@Component
public class FacebookJsonConnection extends JsonConnection {

    @Inject
    private UrlBuilder urlBuilderFacebook;    
}

スーパークラスは抽象またはコンポーネントにすることができますが、問題ではありません。UrlBuilder重要なのは、必要に応じてスーパークラスと@Injectそれらを提供する軽量のサブクラスを作成できるようにしたいということです。

@Inject
private JsonConnection facebookJsonConnection;

また

@Inject
private JsonConnection redmineJsonConnection;

また、どのサブクラスがそれを使用しているかについて、スーパークラスに何も知らせたくありません。

4

1 に答える 1

6

urlBuilderが必要な場合はJsonConnection、コンストラクター引数として渡し、コンストラクター注入を使用できます。

public class JsonConnection{
    private UrlBuilder urlBuilder;

    public JsonConnection(UrlBuilder urlBuilder) {
        this.urlBuilder = urlBuilder;
    }
} 

@Component  
public class FacebookJsonConnection extends JsonConnection {
    private UrlBuilder urlBuilderFacebook;
    @Inject
    public FacebookJsonConnection(UrlBuilder urlBuilderFacebook) {
        super(urlBuilderFacebook);
        this.urlBuilderFacebook = urlBuilderFacebook;
    }
}  
于 2012-04-26T09:22:49.663 に答える