Предположим, у меня есть класс, внедривший много весенних бобов:
@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)
}
}
}
И когда я хочу распечатать все зарегистрированные bean-компоненты, я не могу найти bean-компонент simpleComparator
.
Кажется, что вся связанная информацияSpringBoot на основе.Но я не могу найти чистый SpringRunner
пример модульного теста.Спасибо.
версии:
<kotlin.version>1.3.30</kotlin.version>
<spring.version>5.1.4.RELEASE</spring.version>