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>