@GetMapping 애너테이션을 사용하지 않는것과 비슷한 이유로 빈 등록시 애너테이션을 사용하지 않기 위해 보통 Beans.kt 파일을 만들고 빈을 함수형으로 등록하곤 한다.

이때 사용되는 라이브러리가 Kotlin Bean DSL 임. 코틀린으로 작성된 Spring WebFlux 프로젝트를 보면 이 Beans.kt 가 있을 것이다.

예시는 다음과 같다.

// 어노테이션 방식
@Component class UserHandler
@Component class UserService
@Repository class UserRepository

// Kotlin Bean DSL
fun beans() = beans {
    bean<UserHandler>()
    bean<UserService>()
    bean<UserRepository>()
}

참고로 Java에서는 어노테이션 없이 빈을 함수형으로 등록하는게 좀 더 번거롭다.

// Java - 함수형 빈 등록 (verbose)
GenericApplicationContext context = new GenericApplicationContext();
context.registerBean(UserHandler.class, () -> new UserHandler());
context.registerBean(UserService.class, () -> new UserService());

그래서 WebFlux + 애너테이션 기반 빈 등록 방식을 사용하기도 한다.