如何在服务层内调用服务

时间:2010-06-11 08:30:21

标签: java spring spring-mvc aop

在我的服务层

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]的不满意的依赖项:expected至少1个匹配的豆

2 个答案:

答案 0 :(得分:6)

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

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。我建议反对。

答案 1 :(得分:0)

除了有一个大写变量而且没有冒号外 - 没关系。

当然,您需要将您的类定义为bean。通过在其上使用@Service(或其他刻板印象)注释,或在<bean>中使用applicationContext.xmlsee here获取在春季2中引入的基于注释的配置)

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