【发布时间】:2020-10-04 14:59:53
【问题描述】:
我有一个abstract 类,它具有以下构造函数 -
abstract class AbstractA<T> {
protected CrudRepository<T, Long> crudRepository;
AbstractA(CrudRepository crudRepository) {
this.crudRepository = crudRepository;
}
}
abstract class AbstractB extend AbstractA<TableB> {
protected Service service;
// I want to autowire ConcreteCrudReposity here, but get myService from
// subclass which is not a spring service.
@Autowired
AbstractB(
ConcreteCrudRepository<TableB, Long> concreteCrudRepository,
MyService myService) {
super(concreteCrudRepository);
}
}
class AB extend AbstractB {
AB() {
super(new MyService()); // I know this is lame
}
}
我想使用构造函数注入在抽象类 AbstractB 中注入一个 spring 服务,但另一个服务 (MyService) 需要来自不是 spring 服务的子类。
我知道我可以 @Autowire 子类中的依赖项,但可以在 AbstractB 中执行此操作,因为此依赖项实际上应该从 AbstractB 注入(请参阅通用实体类型)。而且我只有构造函数注入作为选项。请注意,我使用的是泛型,还有更多代码我没有展示以保持问题简单。
【问题讨论】:
-
就像使用普通的 java 一样,您根本无法做到这一点。您需要通过调用 super 将所有依赖项传递给构造函数。否则将无法正常工作。
标签: java spring dependency-injection