해결된 질문
작성
·
327
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
여기에 질문 내용을 남겨주세요.
v5 코드를 작성했을 때, 아래와 같은 에러가 발생해서
Description:
Parameter 0 of constructor in hello.advanced.app.v5.OrderRepositoryV5 required a bean of type 'hello.advanced.trace.callback.TraceTemplate' that could not be found.
Action:
Consider defining a bean of type 'hello.advanced.trace.callback.TraceTemplate' in your configuration.
Process finished with exit code 1
TraceTemplate 클래스에 @Component 애노테이션을 추가했는데요.
@Component
@RequiredArgsConstructor
public class TraceTemplate {
private final LogTrace 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;
}
}
}
pdf에는 빈 등록과 관련된 부분이 없는 것 같은데, 빈 등록을 하지 않아도 실행이 되어야 하는 것인가요?
스프링 부트 3.1.7 버전 사용하고 있습니다.
감사합니다.
답변 1
0
안녕하세요. gooroom님
제 생각에 생성자 코드가 잘못된 것 같아요. 다음 생성자의 두번째 매개변수가 LogTrace입니다. 그리고 생성자 내부에서 new TraceTemplate(trace)로 되어 있습니다. 이 부분을 다시 확인해주세요.
@RestController
public class OrderControllerV5 {
private final OrderServiceV5 orderService;
private final TraceTemplate template;
public OrderControllerV5(OrderServiceV5 orderService, LogTrace trace) {
this.orderService = orderService;
this.template = new TraceTemplate(trace);
}
}
감사합니다.
말씀해주신 부분 수정해서 해결하였습니다.
감사합니다!