Kotlin에서 ApplicationContext로 빈 등록하기

dojinyou·2023년 1월 22일
0

인프런의 토비의 스프링부트 강의를 수강하던 중 ApplicationContext에 빈 등록하는 과정이 Java와 Kotlin이 달라 혹시나 같은 에러 상황을 맞이하시는 분들을 위해 저의 해결 과정을 공유합니다.

문제 상황

GenericApplicationContextregisterBean함수에 대해서 주입하려는 빈 객체의 생성자 인자가 없는 경우 beanClass 파라미터 1개만이 인자로 전달되게 됩니다. 이 경우에서 코틀린 컴파일러가 아래의 2가지 함수 중 하나를 선정하지 못하는 컴파일 에러가 발생하였습니다.

  1. registerBean(beanClass: Class<TypeVariable(T)!>, vararg constructorArgs: Any!): Unit
  2. registerBean(beanClass: Class<TypeVariable(T)!>, vararg customizers: BeanDefinitionCustomizer!)

초기 해결 방법

저는 이것이 코틀린 컴파일러의 문제라고 생각하였습니다. 그래서 이를 해결하기 위해 customizers파라미터의 타입인 BeanDefinitionCustomizer를 람다 형식으로 정의해주어 컴파일러가 위 2번 함수를 사용하도록 강제하였습니다.

하지만 이게 좋은 방식이라고 생각하지 않아서 정확한 방식을 찾아보았습니다.

정상적인 등록 방법

공식 문서를 찾아보니 코틀린의 경우 registerBean이 확장함수로 재정의 되어 있었습니다. 이를 이용하여 정상적으로 빈을 등록할 수 있었습니다. (사진 및 링크 참고)

관련 링크 : https://docs.spring.io/spring-framework/docs/5.0.0.RELEASE/spring-framework-reference/kotlin.html

profile
더 좋은 세상을 만드는 데 기술로 기여하고 싶습니다

0개의 댓글