2014-09-01 3 views
0

У меня есть класс реализации, который ловит все объявленные исключения метода интерфейса. Поскольку я ввожу и использую переменную экземпляра интерфейса внутри класса и надеюсь вызвать метод реализации - я, естественно, получаю ошибку компилятора, указывающую, что мне нужно либо бросить/уловить исключения, объявленные в родительском.Spring: DI с интерфейсом с классом реализации менее ограничительные исключения

Немного вариантов, которые приходят мне на ум, но мне они не нравятся. Просто хочу знать, как лучше всего это сделать.

  1. Cast экземпляр интерфейса для осущ
  2. Создать интерфейс ребенка с помощью метода без исключений
  3. Может быть просто не объявлять исключения в интерфейсе. Просто поймайте все возможные исключения в impl.

EDIT 1: Прикрепленный пример кода


    public interface ServiceUtilInterface { 

     public abstract String getMessage(String ID) throws CustomException; 
    } 

    @Component(value="MyServiceUtil") 
    public class MyServiceUtil implements ServiceUtilInterface { 

     @Override 
     public String getMessage(String ID) { 
       try{ 
     //do something 
        }catch(CustomException e){ 
     } 
     return ""; 

    } 

@Component 
public class Usage { 

    @Autowired 
    ServiceUtilInterface serviceUtil; 


    public void someMethod(){ 

    serviceUtil.getMessage("123"); 
    //This where compiler expects me to throw /catch the exception defined in interface 
    } 

} 
+0

Объяснение с помощью некоторого кода helpus –

+0

Отредактировал мой вопрос с помощью некоторого кода. Спасибо – pingu

ответ

1

UPDATE

  1. Cast экземпляр интерфейса для осущ - никогда не делать этого. Если вы используете Spring, вы никогда не знаете, что такое реализация интерфейса. Это должно быть зависимо от конфигурации. Если вы начнете писать jUnits, вам, вероятно, понадобится использовать ложные компоненты для тестирования. Затем, если вы попытаетесь применить свой макет к конкретной реализации, ваш код не удастся. Другими словами, вы никогда не сможете написать правильные модульные тесты. Другое дело, что если вы добавите некоторые аспекты или сделаете услугу @Transactional или @Validated, то вы не сможете их использовать, потому что вместо вашей реализации вы можете получить прокси-объект.

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

+0

Спасибо Marek. Я редактировал свой вопрос с помощью некоторого кода. Надеюсь, что это ясно. – pingu

+0

oki, я также обновил ответ. –

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