简体   繁体   English

如何使用另一个服务的实例自动装配服务

[英]How to autowire a Service with another Service's instance

I'm trying to invoke a function in a Service instance which is Autowired to another Service.我正在尝试调用自动连接到另一个服务的服务实例中的函数。 Something structured like this:结构如下:

public interface HomeService {
  
  public int fixRoof();

}

@Service
public class HomeServiceImpl implements HomeService {
  private FixRoofOpService fixRoofOpService;
  
  @Autowired
  HomeServiceImpl(FixRoofOpService fixRoofOpService) {
    this.fixRoofOpService = fixRoofOpService;
  }

  @Override
  public int fixRoof() {
    return this.fixRoofOpService();
  }
}

@Service
public class FixRoofOpService {
  public int execute() {
      return 3;
  }
}

@Service
public class MyDay {
  private HomeService homeService;
  
  @Autowired
  MyDay(HomeService homeService) {
    this.homeService = homeService;
  }

  private int someFunction() { 
    return this.homeService.fixRoof();
  }
}

While executing MyDay.someFunction() I get a NullPointerExeception when this.homeService.fixRoof() is called.在执行MyDay.someFunction()时,当this.homeService.fixRoof()被调用时,我得到一个 NullPointerExeception。 I've verified that HomeService within MyDay is successfully injected.我已验证 MyDay 中的 HomeService 已成功注入。 However, its fixRoof's reference is null.但是,其 fixRoof 的引用为空。 Thanks in advance!提前致谢!

The first mistake is in the HomeServiceImpl class.第一个错误是在 HomeServiceImpl 类中。 You are trying to return a object as a function.您正在尝试将对象作为函数返回。 This itself should give you a compilation error这本身应该会给你一个编译错误

@Override
  public int fixRoof() {
    return this.fixRoofOpService();
  }

The below code works for me, please check if this helps you -以下代码对我有用,请检查这是否对您有帮助-

    public interface HomeService {
      public int fixRoof();
    }

    @Service
    public class HomeServiceImpl implements HomeService {
      @Autowired
      private FixRoofOpService fixRoofOpService;

      @Override
      public int fixRoof() {
        return fixRoofOpService.execute();
      }
    }

    @Service
    public class FixRoofOpService {
      public int execute() {
        return 3;
      }
    }

    @Service
    public class MyDay {
      @Autowired
      private HomeService homeService;

      public int someFunction() {
        return this.homeService.fixRoof();
      }
    }

Now when you @Autowire MyDay and call myDay.someFunction() you should get the value 3 in return.现在,当您 @Autowire MyDay 并调用 myDay.someFunction() 时,您应该得到值 3 作为回报。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM