有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpring将参数注入带有注释的超类中

我有一个超类,它需要子类来提供超类所运行接口的实现

我们使用Spring和DI,所以我们不能仅仅用新的

子类只有在Spring初始化后才知道提供哪个bean,所以使用超级构造函数是行不通的

我也不想在子类中使用q@PostConstructsetup方法,因为这需要子类开发人员知道如何设置超类

我希望超类要求子类提供对实现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;

我也不想让超类知道哪个子类在使用它


共 (1) 个答案

  1. # 1 楼答案

    如果JsonConnection需要urlBuilder,可以将其作为构造函数参数传递,并使用构造函数注入:

    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;
        }
    }