Kotlin + Spring 5 функциональных бобов, смешанных с тестом традиционных бобов БЕЗ пружинной загрузки

Предположим, у меня в классе введено много весенних бобов:

@Component
open class CoreContext {

  @Inject
  protected lateinit var bean1 : SomeInterface1

  @Inject
  protected lateinit var bean2 : SomeInterface2

}

Это определено в context:component-scan блокировать в core.xml и в традиционном SpringTest он работает так:

@RunWith(SpringRunner::class)
@ContextConfiguration(locations = ["classpath:core.xml"])
class CoreContextTest { ... }

Теперь я хочу попробовать использовать DSL-стиль для определения bean-компонентов и использовать эти DSL-определенные bean-компоненты со старыми bean-компонентами:

@Component
class MyBeans : CoreContext() {

  val beans = beans {

    bean("simpleComparator") {
      Comparator<Number> { o1, o2 -> o1.toInt().minus(o2.toInt()) }
    }

  }
}

MyBeans находится в component-scan пакеты, и IntelliJ правильно обнаруживает это.

Но как проверить этот простой компаратор?

Я стараюсь @Inject simpleComparator : Comparator<Number>, но IntelliJ жалуется No beans of Comparator<Number> type found, И во время выполнения это не удалось, как ожидалось.


@RunWith(SpringRunner::class)
@ContextConfiguration(locations = ["classpath:core.xml"])
class MyBeansTest {


  @Inject
  private lateinit var context: ApplicationContext

//  @Inject // No beans of Comparator<Number> type found
//  private lateinit var simpleComparator : Comparator<Number> 

  @Test
  fun printBeans() {
    logger.info("context = {}", context)
    context.beanDefinitionNames.forEach { name ->
      logger.info("{}", name)
    }
  }

}

И когда я хочу распечатать все зарегистрированные бины, я не могу найти simpleComparator фасоль

Кажется, вся связанная информация основана на SpringBoot. Но я не могу найти чистый SpringRunner пример модульного теста. Благодарю.

версии:

<kotlin.version>1.3.30</kotlin.version>
<spring.version>5.1.4.RELEASE</spring.version>

0 ответов

Другие вопросы по тегам