JWT 관련해서 코드를 구현하던 중 아래와 같은 에러가 발생했다.
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in ~ required a bean of type 'java.lang.String' that could not be found.
Action:
Consider defining a bean of type 'java.lang.String' in your configuration.
Process finished with exit code 0
설명을 직역하자면, "해당 클래스에 있는 생성자의 매개 변수는 "java.lang.String" 타입의 빈이 필요한데, 찾을 수 없다 "는 것이다.
즉, 생성자에서 String type Bean이 필요한데 없다!
문제의 원인은 아래 AuthTokenProvider
클래스를 보면 secret이라는 변수가 들어간다.
이 secret은 JwtConfig
클래스에서 @Value
애너테이션을 통해 application.yml
파일에 정의된 값을 주입받도록 설정되어 있다.
그런데 이게 적용이 왜 안되나 했더니
해당 클래스에 @Configuration
애너테이션이 붙어 있으면, 이 값을 주입받는 생성자에 @Bean
을 붙여야 하는데,
이를 붙이지 않았다는 것을 알게되었다..!
결국 이 에러는 String 타입의 변수가 스프링 컨테이너에 빈으로 등록되어 있지 않아서 의존성을 주입할 수 없다는 말이었다.
그래서 아래와 같이 @Bean을 붙여주니 잘 해결되었다. ㅎㅎ