как вызвать сервис внутри сервисного уровня - PullRequest
3 голосов
/ 11 июня 2010

в моем слое обслуживания

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': сбой автоматического подключения полей; вложенное исключение - 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]: неудовлетворительная зависимость типа [interface com.company.iss.services.MyServiceLayer] по крайней мере 1 соответствующий боб

Ответы [ 2 ]

6 голосов
/ 14 июня 2010

Трудно сказать по странному форматированию и именованию, но если вы хотите вызывать одну услугу из другой:

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 на самом деле ничего не делает. Я бы рекомендовал против этого.

0 голосов
/ 11 июня 2010

Помимо наличия заглавной переменной и без двоеточия - это нормально.

Вы, конечно, должны определить свой класс как боб. Либо с помощью аннотации @Service (или другого стереотипа), либо с помощью <bean> в applicationContext.xml ( см. Здесь для конфигурации на основе аннотации, представленной весной 2)

Другое дело: переменные-члены должны быть строчными, а не прописными.

...