【问题标题】:How to use Spring Dependency Injection with class inheritance如何使用带有类继承的 Spring 依赖注入
【发布时间】:2018-08-08 23:02:31
【问题描述】:

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

【问题讨论】:

  • 请举例说明您所说的内容。
  • 父类中的方法是怎么定义的,又是怎么调用的?您是否能够手动实例化这些类并获得所需的结果?
  • @BillMan 我可以手动实例化类,但更喜欢 DI。请参阅上面编辑过的问题,以便更好地了解我在说什么。
  • 您的 eqService 是否定义了 combineBools 方法?这不是春季问题。
  • @DarrenForsy 不需要定义它。它继承了它。

标签: java spring inheritance dependency-injection autowired


【解决方案1】:

正如 DarrenForsythe 所指出的,我使用 EqService 作为类型进行实例化,因此它不会具有 BaseService 的所有方法,因为它不扩展该类,而是扩展该类的 EqServiceImpl。因此我需要类型为 EqServiceImpl。如果不进行其他一些更改,@Autowired 在这里并不是 DI 的最佳选择。

【讨论】:

    猜你喜欢
    • 2021-11-05
    • 2015-09-03
    • 2015-06-18
    • 2017-06-16
    • 2023-03-28
    • 2016-01-06
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    相关资源
    最近更新 更多