【问题标题】:how to call service inside service layer如何在服务层调用服务
【发布时间】:2010-06-11 08:30:21
【问题描述】:

在我的服务层

public class  MyServiceLayerImpl{   
    public void method1(){
       MyServicelayer.method();  //is this correct?
    }

    public void method2(){
    }

    @Autowired
    MyServiceInterface MyServiceLayer;
}

如果我在服务层中有方法需要在服务层中调用另一个服务。我不能使用 this._method ,因为我正在使用 AOP 进行缓存。为了使缓存工作,我必须使用@Autowired 来获取服务。所以,上面的样式可以吗?

我得到以下错误

原因:org.springframework.beans.factory.BeanCreationException:创建名为“com.company.iss.services.MyServiceLayerImpl#85aedd”的bean时出错:字段自动装配失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:com.company.iss.services.MyServicelayer com.company.iss.services.MyServiceLayerImpl.MyServiceLayer;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义类型 [com.company.iss.services.MyServiceLayer] 的唯一 bean:未满足类型 [interface com.company.iss.services.MyServiceLayer] 的依赖关系:预期至少 1 个匹配的 bean

【问题讨论】:

  • 你能提供更多的代码和上下文吗?我无法理解您要做什么...
  • @davetron5000 我更新了我的问题

标签: java spring spring-mvc aop


【解决方案1】:

很难从奇怪的格式和命名中分辨出来,但是如果你想从另一个服务调用一个服务:

public interface MasterService {
  void someMethod();
}

public class MasterServiceImpl implements MasterService {
  private OtherService otherService;

  public void someMethod() {
    this.otherService.someCallOnOtherService();
  }

  @Autowired
  public void setOtherService(OtherService otherService) {
    this.otherService = otherService;
  }
}

现在,您必须配置了MasterServiceImpl 和任何实现OtherService 的东西。有很多方法可以做到这一点,最流行的是在您的 XML 配置中显式配置基于注释的配置紧随其后。

还要注意,如果您不使用接口,AOP 往往会非常不稳定。在您的代码中,您的 Impl 实际上并没有 implement 任何东西。我建议不要这样做。

【讨论】:

    【解决方案2】:

    除了有一个大写的变量和没有冒号 - 没关系。

    当然,您需要将您的类定义为 bean。通过在其上使用@Service(或其他原型)注释,或在applicationContext.xml 中使用<bean>see here 用于 spring 2 中引入的基于注释的配置)

    另一件事:你的成员变量应该是小写的,而不是大写的。

    【讨论】:

    • 如果我以这种方式调用该方法,则会出错。请看我的更新
    猜你喜欢
    • 1970-01-01
    • 2018-07-02
    • 2012-05-11
    • 2011-09-29
    • 2015-02-21
    • 2014-02-13
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多