powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как реализовать Шаблонный метод в spring
5 сообщений из 5, страница 1 из 1
как реализовать Шаблонный метод в spring
    #38537480
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используется spring, в реализации одного сервиса есть два метода, которые имеют довольно объемный код и отличаются одной строкой. В этой строке вызываются разные методы другого сервиса (otherService) с разным типом параметров.
Вопрос как это можно переделать, чтобы не дублировать код)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
@Service("a")
class ServiceAImpl implements ServiceA {

@Autowired
private utilService;

@Autowired
private otherService;

@Override
public action1(Type1 paramType1) {


utilService.method1();
//....
utilService.method2();
//....

//Отличие метода action1 и action2 в этой строчке
otherService.methodA(paramType1);

utilService.method3();
//....
utilService.method4();
//....

}

@Override
public action2(Type2 paramType2) {


utilService.method1();
//....
utilService.method2();
//....

//Отличие метода action1 и action2 в этой строчке
otherService.methodB(paramType2);

utilService.method3();
//....
utilService.method4();
//....

}
    


}
...
Рейтинг: 0 / 0
как реализовать Шаблонный метод в spring
    #38537483
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и напрашивается Action<Type> отдельным классом. Стоило привести реальные имена классов и методов, тогда бы было очевиднее как сделать лучше. А на пальцах можно много способов придумать.

Например

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public action(Runnable runnable) {
    utilService.method1();
    utilService.method2();

    runnable.run();

    utilService.method3();
    utilService.method4();
}

public action2(Type2 paramType2) {
   action(new Runnable(){
       public void run(){
             service.methodA(paramType2);
       }
   }
})




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
actionMap.put(Type1.class, new ExactAction());


void action(Type type){
    Action action = actionMap.get(type.getClass());
    action.actionPerformed();
}

class  AbstractAction<T>{

abstract void specialMethod(T t);

public void actionPerformed(Type type) {
    utilService.method1();
    utilService.method2();
    specialMethod();
    utilService.method3();
    utilService.method4();
}

class ExactAction extends AbstractAction<Type1>{
    void specialMethod(Type1 t){
        otherService.methodA(t);
    }

}

}
...
Рейтинг: 0 / 0
как реализовать Шаблонный метод в spring
    #38537489
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первом варианте я могу получить доступ к otherService (анонимный класс) если я правильно понимаю. Но через Runnable это не слишком грубо?

Во втором варианте я не очень понимаю как я получу доступ к сервису otherService, который в вашем примере используется в абстрактном классе. Объявлять каждый такой класс (как ExactAction) как @Component или @Service, чтобы аннотация @Autowired сработала? И как это воспримет Spring? Использовать оператор new при добавлении в actionMap не получиться.
...
Рейтинг: 0 / 0
как реализовать Шаблонный метод в spring
    #38537521
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AOP может подойти при определенных условиях
...
Рейтинг: 0 / 0
как реализовать Шаблонный метод в spring
    #38537522
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока я воспользовался первым вариантом предложенным Blazkowicz, хотя меня смущает необходимость объявлять параметры как final
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / как реализовать Шаблонный метод в spring
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]