2012-04-26 7 views
1

私は、スーパークラスが実行されるインタフェースの実装を提供するためにサブクラスを必要とするスーパークラスを持っています。Java Spring - アノテーションを使用してスーパークラスにパラメータを挿入します。

私たちはSpringとDIを使用して、newを使って実装を作成することはできません。

サブクラスは、Springが初期化された後にのみ提供されるBeanを知っているので、スーパーコンストラクタを使用しても機能しません。

サブクラスの開発者がスーパークラスをセットアップする方法を知る必要があるので、サブクラスにq @PostConstructセットアップメソッドを使用したくない場合もあります。

私はスーパークラスはそれがセットアップ加盟できるように実装する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; 

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

答えて

5

urlBuilderJsonConnectionのために必要とされる場合は、constuctor引数として渡すと、コンストラクタ・インジェクションを使用することができます。

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; 
    } 
} 
関連する問題