Pet*_*ete 2 java inheritance spring dependency-injection superclass
我有一个超类需要子类来提供超类运行的接口的实现.
我们使用Spring和DI,因此我们不能仅使用new创建实现.
子类将知道在初始化Spring之后才提供哪个bean,因此使用超级构造函数将无法工作.
我也不想@PostConstruct在子类中使用q setup方法,因为这需要子类开发人员知道如何设置超类.
我希望超类要求子类提供对实现bean的引用,以便它可以设置其成员:
超类使用UrlBuilder接口:
public class JsonConnection{
    private UrlBuilder urlBuilder;
}
子类UrlBuilderFacebook通过依赖注入提供implementation().
@Component
public class FacebookJsonConnection extends JsonConnection {
    @Inject
    private UrlBuilder urlBuilderFacebook;    
}
超类可以是抽象的或组件,也没关系.重要的是我希望能够创建轻量级子UrlBuilder类,@Inject在需要的地方提供超类和它们.
@Inject
private JsonConnection facebookJsonConnection;
要么
@Inject
private JsonConnection redmineJsonConnection;
另外,我不希望超类知道哪个子类正在使用它.
如果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;
    }
}  
| 归档时间: | 
 | 
| 查看次数: | 2902 次 | 
| 最近记录: |