2010-06-11 2 views
3

в моем слое, как позвонить в службу внутренней службы слоя

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: Не удалось создать поле autwire: 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 подходящий бобин

+1

Можете ли вы предоставить больше кода и контекста? Я не могу понять, что вы пытаетесь сделать ... – davetron5000

+0

@ davetron5000 Я обновил свой вопрос – cometta

ответ

0

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

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

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

+0

Я получаю ошибку, если я вызываю метод таким образом. см. мое обновление – cometta

+0

см. мой ...,;) – Bozho

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 с аннотацией, настроенной на вторую секунду.

Также обратите внимание, что АОП имеет тенденцию быть очень шелушащимся, если вы не используете интерфейсы. В вашем коде ваш Impl фактически не implement ничего. Я бы рекомендовал против этого.

Смежные вопросы