gpt4 book ai didi

Java Spring - 将参数注入(inject)带有注释的父类(super class)

转载 作者:行者123 更新时间:2023-11-30 05:53:37 25 4
gpt4 key购买 nike

我有一个父类(super class)需要子类提供父类(super class)运行所针对的接口(interface)的实现。

我们使用 Spring 和 DI,所以我们不能只使用 new 创建实现。

只有在 Spring 初始化之后,子类才会知道要提供哪个 bean,因此使用 super 构造函数是行不通的。

我也不想在子类中使用 q @PostConstruct 设置方法,因为这需要子类开发人员知道如何设置父类(super class)。

我希望父类(super class)要求子类提供对实现 bean 的引用,以便它可以设置其成员:


父类(super class)使用 UrlBuilder 接口(interface):

public class JsonConnection{

private UrlBuilder urlBuilder;
}

子类通过依赖注入(inject)提供实现(UrlBuilderFacebook)。

@Component
public class FacebookJsonConnection extends JsonConnection {

@Inject
private UrlBuilder urlBuilderFacebook;
}

父类(super class)可以是抽象的也可以是组件,这都没有关系。重要的是,我希望能够创建轻量级子类,为父类(super class)提供 UrlBuilder 并在需要时为它们提供 @Inject

@Inject
private JsonConnection facebookJsonConnection;

@Inject
private JsonConnection redmineJsonConnection;

我也不希望父类(super class)知道哪个子类正在使用它。

最佳答案

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

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

关于Java Spring - 将参数注入(inject)带有注释的父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10330447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com