public interface TraceCallback<T> {
T call();
}
콜백용 인터페이스 하나 만들고,
public class TraceTemplate {
private final LogTrace trace;
public TraceTemplate(LogTrace trace) {
this.trace = trace;
}
public <T> T execute(String message, TraceCallback<T> callback){
TraceStatus status = null;
try{
status = trace.begin(message);
// 로직
T result = callback.call();
trace.end(status);
return result;
} catch (Exception e){
trace.exception(status, e);
throw e;
}
}
}
적용.
저 <T> 이게 제너릭 쓴다는 거임.
<A> 이렇게 하면 A라는 이름으로 씀.
@GetMapping("/v5/request")
public String request(@RequestParam("itemId") String itemId){
return template.execute("OrderController.request()",()->{
orderService.orderItem(itemId);
return "ok";
});
}
사용.
return String으로 해서, 인터페이스도 제너릭이라서 String으로 정해짐.
public void save(String itemId){
template.execute("OrderRepository.save()", ()->{
if(itemId.equals("ex")){
throw new IllegalStateException("예외 발생!!");
}
sleep(1000);
return null;
});
}
void는 이렇게 null 하면 됨.
'스프링 > 스프링 핵심 원리 - 고급편' 카테고리의 다른 글
27. 프록시, 데코레이션 패턴 예제 틀 및 요구사항 (0) | 2024.01.19 |
---|---|
26. 컨트롤러 인터페이스 및 수동 빈 등록 (0) | 2024.01.19 |
24. 템플릿 콜백 패턴 (0) | 2024.01.17 |
23. 전략 패턴 인자로 받기 (0) | 2024.01.17 |
22. 전략 패턴 익명 및 람다 (0) | 2024.01.17 |