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 回答