Bean의 이름이 설정되는 방법
Bean의 이름은 @Bean 어노테이션이 붙은 함수의 이름으로 자동 설정된다. 예를 들어 다음과 같이 Bean들이 설정되어 있다고 해보자.
@Configuration
class DefaultContainerConfiguration {
@Bean
fun blogName(): String {
return "KotlinWorld"
}
@Bean
fun blogAge(): Int {
return 3
}
}
그러면 blogName 이라는 이름의 Bean은 "KotlinWorld"라는 값을 가지고, blogAge 라는 이름의 Bean은 3이라는 값을 가져 아래 그림과 같은 모양이 된다.
@Bean의 name 프로퍼티 사용해 Bean의 이름 커스텀하게 설정하기
하지만, Bean의 이름을 다르게 설정하거나, 하나의 Bean에 여러 개의 이름을 설정해야 할 수 있다. 이런 경우 @Bean Annotation의 name 프로퍼티를 사용하면 Bean의 이름을 커스텀하게 설정할 수 있다.
예를 들어 blogName의 Bean의 이름을 blogName1과 blogName2로 설정하고 싶다면 다음과 같이 blogName 함수 위에 @Bean(name = ["blogName1", "blogName2"]) 이라고 코드를 작성하면 된다.
@Configuration
class DefaultContainerConfiguration {
@Bean(name = ["blogName1", "blogName2"])
fun blogName(): String {
return "KotlinWorld"
}
@Bean
fun blogAge(): Int {
return 3
}
}
그러면 이제 IOC Container는 다음과 같은 모양이 된다.
따라서 기존의 blogName은 더이상 Bean의 이름이 아니게 되기 때문에 다음 코드와 같이 context.getBean("blogName")을 호출하면, NoSuchBeanDefinitionException 예외가 발생하게 된다.
fun main(args: Array<String>) {
val context = AnnotationConfigApplicationContext(DefaultContainerConfiguration::class.java)
println(context.getBean("blogName"))
}
아래는 코드를 실행한 결과이다.
NoSuchBeanDefinitionException 예외를 해결하기 위해서는 커스텀하게 설정한 Bean의 이름인 blogName1이나 blogName2을 사용하면 된다.
fun main(args: Array<String>) {
val context = AnnotationConfigApplicationContext(DefaultContainerConfiguration::class.java)
println(context.getBean("blogName1"))
println(context.getBean("blogName2"))
}
그러면 다음과 같은 결과가 나오는 것을 볼 수 있다.
여기까지 @Bean의 name 프로퍼티를 사용해 Bean의 이름을 커스텀하게 설정하는 방법을 알아봤다.
Code: GitHub
도움이 되셨다면 ⭐️를 눌러주세요!