source

스프링부트 및 스프링웹플럭스와 함께 "기능성 콩 정의 코틀린 DSL"을 사용하는 방법?

ittop 2023. 10. 29. 19:57
반응형

스프링부트 및 스프링웹플럭스와 함께 "기능성 콩 정의 코틀린 DSL"을 사용하는 방법?

https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt 의 댓글은 새로운 "기능성 콩 정의 코틀린 DSL"을 통해 봄 콩을 정의하는 방법을 보여줍니다.저도 https://github.com/sdeleuze/spring-kotlin-functional 을 찾았습니다.그러나 이 예제에서는 일반 Spring만 사용하고 Spring Boot는 사용하지 않습니다.DSL을 Spring Boot와 함께 사용하는 방법을 알려주시면 감사하겠습니다.

스프링 부트는 Java Config를 기반으로 하지만 다음을 통해 사용자 정의 기능적선언 DSL의 실험적 지원을 허용해야 합니다.ApplicationContextInitializer여기에 기술된 바와 같은 지원

실제로, 예를 들어, 당신은 당신의 콩을 신고할 수 있어야 합니다.Beans.kt가 들어 있는 파일beans()기능.

fun beans() = beans {
    // Define your bean with Kotlin DSL here
}

그럼 실행할 때 Boot에서 고려할 수 있도록 하기 위해서입니다.main()테스트하고, 생성합니다.ApplicationContextInitializer다음과 같은 클래스:

class BeansInitializer : ApplicationContextInitializer<GenericApplicationContext> {

    override fun initialize(context: GenericApplicationContext) =
        beans().initialize(context)

}

그리고 궁극적으로 이 이니셜라이져를 당신의application.properties파일:

context.initializer.classes=com.example.BeansInitializer  

여기에서 전체 예시를 찾을 수 있으며 기능성 콩 등록을 위한 전용 스프링 부트 지원에 대한 이 문제를 따를 수도 있습니다.

Spring Boot의 또 다른 방법은 다음과 같습니다.

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args) {
        addInitializers(
                beans {
                    // Define your bean with Kotlin DSL here
                }
        )
    }
}

*Config.kt 파일에서 빈을 정의하고 ApplicationContextInitializer 인터페이스의 initialize 메서드를 구현할 수 있습니다.

override fun initialize(applicationContext: GenericApplicationContext) {
    ....
}

여기 콩의 정의가 있습니다.

bean<XServiceImpl>("xService")

bean("beanName") {
        BeanConstructor(ref("refBeanName"))
}

언급URL : https://stackoverflow.com/questions/45935931/how-to-use-functional-bean-definition-kotlin-dsl-with-spring-boot-and-spring-w

반응형