2012-04-26 64 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

如果urlBuilder需要JsonConnection,你可以把它作为一个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; 
    } 
}