如何在类继承中使用Spring Dependency Injection

时间:2018-08-08 23:02:31

标签: java spring inheritance dependency-injection autowired

我有一个称为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(),则无法访问。为什么是这样?我该如何解决?

1 个答案:

答案 0 :(得分:0)

正如DarrenForsythe指出的那样,我以EqService作为类型进行实例化,因此它不会具有BaseService的所有方法,因为它没有扩展该类,而是EqServiceImpl扩展了该类。因此,我需要将类型设置为EqServiceImpl。如果不进行其他更改,@ Autowired并不是此处DI的最佳选择。