【发布时间】:2012-05-07 00:14:48
【问题描述】:
我有一个超类,它需要子类来提供超类所针对的接口的实现。
我们使用 Spring 和 DI,因此我们不能只使用 new 创建实现。
只有在 Spring 初始化之后,子类才会知道要提供哪个 bean,因此使用超级构造函数将不起作用。
我也不想在子类中使用 q @PostConstruct 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;
另外,我不希望超类知道哪个子类正在使用它。
【问题讨论】:
标签: java spring inheritance dependency-injection superclass