我有一个称为BaseService的父类,并且我有其他服务都继承自BaseService,因为它们都需要这些方法来完成其工作。像往常一样,超类的方法在子类中可用...但是,当我使用@Autowired DI注入子类时,我无法使用父类定义的方法,而只能使用定义的方法分别在子类中。如何注入子类并使其正确实例化子类,以使父类的方法可供我使用?
例如家长班
@Service
public class BaseService{
public BooleanExpression combineBools(Predicate predicate, BooleanExpression bool){
BooleanExpression result = runupBool.and(predicate);
return result;
}
}
例如儿童班
@Service
public class EqServiceImpl extends BaseService implements EqService{
public EqServiceImpl(){
super();
}
@Override
public Iterable getAllData(Map<String, String> params, Predicate predicate) {
// Some Method Specific to Child Class
}
}
例如控制器
@RestController
public class EqController {
@Autowired
EqService eqService
...
}
如果我想访问控制器内的方法eqService.combineBools()
,则无法访问。为什么是这样?我该如何解决?
答案 0 :(得分:0)
正如DarrenForsythe指出的那样,我以EqService作为类型进行实例化,因此它不会具有BaseService的所有方法,因为它没有扩展该类,而是EqServiceImpl扩展了该类。因此,我需要将类型设置为EqServiceImpl。如果不进行其他更改,@ Autowired并不是此处DI的最佳选择。