Unsatisfied / Dependency / Exception
만족스럽지못한 / 의존관계 / 예외
즉 Application 을 실행할때 특정 필드의 DI 가 제대로 주입되지 않아 실패했을 때 발생하는 에러이다.
에러메세지를 잘 읽어보면 어느 Class 의 어느 필드가 문제인지 나오니 확인해서 에러를 해결하면된다.
request Scope 는 클라이언트가 url 에 접속해야 생성이 되는데 Contianer 를 생성하는 시점에 HTTP request 요청이 없기때문에 주입할 스코프가 없어서 에러가 발생하게된다.
Error creating bean with name 'myLogger':
Scope 'request' is not active for the current thread;
// myLogger 에 주입할 Scope 'request' 가 활서어화 되어있지 않다.
진짜 객체 조회를 꼭 필요한 시점까지 지연처리 하는 기능이다.
package hello.core.web;
import hello.core.common.MyLogger;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
@Controller
@RequiredArgsConstructor
public class LogDemoController {
private final LogDemoService logDemoService;
// MyLogger 주입 이 아닌 MyLogger 를 찾을 수 있는 (DL) 필드가 주입이 됨
private final ObjectProvider <MyLogger> myLoggerProvider;
@RequestMapping("log-demo")
@ResponseBody
public String logDemo(HttpServletRequest request) {
// 변수 생성
MyLogger myLogger = myLoggerProvider.getObject();
String requestURL = request.getRequestURL().toString();
myLogger.setRequestURL(requestURL);
myLogger.log("controller test");
logDemoService.logic("testID");
return "OK";
}
}
똑같은 에러가 이번엔 logDemoService 에서 발생했음
UnsatisfiedDependencyException:
Error creating bean with name 'logDemoService' defined in file
package hello.core.web;
import hello.core.common.MyLogger;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class LogDemoService {
private final ObjectProvider <MyLogger> myLoggerProvider;
public void logic(String id) {
MyLogger myLogger = myLoggerProvider.getObject();
myLogger.log("service id = " + id);
}
}
정상적으로 잘 작동된다.
localhost:8080/log-demo 에 접속해서 OK 가 출력되면 성공