• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

템플릿 콜백 패턴 V5 실행 관련 질문드립니다.

24.01.20 23:46 작성 조회수 193

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);
    }
}

감사합니다.

gooroom님의 프로필

gooroom

질문자

2024.01.28

말씀해주신 부분 수정해서 해결하였습니다.

감사합니다!