java通过抽象类实现堆栈_java - Spring Boot-在抽象类中自动装配null - 堆栈内存溢出...

首先,由于可能的原因,不要在接口上选择抽象类:

没有具体的子类实现,就不能实例化抽象类。 它们不会在运行时被Spring注册为组件。

Spring不支持抽象类中的构造方法注入。 但是,有两种选择:

具体子类中的构造函数注入。

在一个抽象类中的Setter注入。

现在,您可以采用其他解决方案:

您具有与Operation相同名称的接口和类。 请删除它。

第一种方法:删除抽象类并直接实现接口。

将代码更新为此:

public interface Operation {

public GenericClientResponse validateCustomerId();

}

@Component

public class OperationImpl implements Operation {

@Autowired

UserAccountsRepository userAccountsRepository;

@Autowired

WebClient.Builder webClientBuilder;

public GenericClientRequest buildClientValidationRequest() {

return new GenericClientRequest();

}

public GenericClientResponse validateCustomerId() {

// code

}

}

第二种方法:尝试在具体的子类中使用构造函数注入。

public interface Operation {

public GenericClientResponse validateCustomerId();

}

public abstract class AbstractOperation implements Operation {

UserAccountsRepository userAccountsRepository;

WebClient.Builder webClientBuilder;

public AbstractOperation(UserAccountsRepository userAccountsRepository, WebClient.Builder webClientBuilder) {

this.userAccountsRepository = userAccountsRepository;

this.webClientBuilder = webClientBuilder;

}

public GenericClientRequest buildClientValidationRequest() {

return new GenericClientRequest();

}

public GenericClientResponse validateCustomerId() {

// code

}

}

@Component

public class OperationImpl extends AbstractOperation {

@Autowired

public OperationImpl(UserAccountsRepository userAccountsRepository, WebClient.Builder webClientBuilder) {

super(userAccountsRepository, webClientBuilder);

}

}

第三种方法:尝试在抽象类中使用setter-injection。

public interface Operation {

public GenericClientResponse validateCustomerId();

}

public abstract class AbstractOperation implements Operation {

UserAccountsRepository userAccountsRepository;

WebClient.Builder webClientBuilder;

@Autowired

public final void setUserAccountsRepository(UserAccountsRepository userAccountsRepository) {

this.userAccountsRepository = userAccountsRepository;

}

@Autowired

public final void setWebClientBuilder(LogRepository webClientBuilder) {

this.webClientBuilder = webClientBuilder;

}

public GenericClientRequest buildClientValidationRequest() {

return new GenericClientRequest();

}

public GenericClientResponse validateCustomerId() {

// code

}

}

@Component

public class OperationImpl extends AbstractOperation {

public void someMethod() {

userAccountsRepository.someRepositoryMethod();

}

}

希望这些信息对您有所帮助。

看到这里更多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值