ComponentScan.basePackageClasses против ComponentScan.basePackages, чтобы зарегистрировать один Spring WebMVC-контроллер?
Я хочу добавить отдельный класс контроллера в мой Spring WebApplicationContext. Я наткнулся на следующий пример: (это в Scala, но адаптировано отсюда:используя ComponentScan или context: компонентное сканирование только с одним классом)
@Configuration
@ComponentScan(
basePackages = Array("com.example.controllers"),
useDefaultFilters = false,
includeFilters = Array(
new ComponentScan.Filter(`type` = FilterType.ASSIGNABLE_TYPE,
value = Array(classOf[com.example.controllers.MyController]))))
class MyConfig {
}
Это работает хорошо (но очень многословно). Но у Spring @ComponentScan также есть basePackageClasses
@Configuration
@ComponentScan( basePackageClasses=Array(classOf[com.example.controllers.MyController]))
class MyConfig {
}
В SpringPocs из basePackageClasses говорится:
Type-safe alternative to basePackages() for specifying the packages to
scan for annotated components.
Однако, хотя первый ComponentScan правильно добавляет только com.example.controllers.MyController, а второй вызывает сканирование и добавление всего моего @Controller! Зачем? Какая польза от basePackageClasses?
Пример как:https://github.com/mikaelhg/springmvc-example/blob/master/src/main/java/mikaelhg/example/ExampleConfiguration.java предположить, что basePackageClasses можно использовать для загрузки одного компонента.
Обновить:
В качестве замены, заменив:
@Configuration
@ComponentScan(
basePackages = Array("com.example.controllers"),
useDefaultFilters = false,
includeFilters = Array(
new ComponentScan.Filter(`type` = FilterType.ASSIGNABLE_TYPE,
value = Array(classOf[com.example.controllers.MyController]))))
class MyConfig {
}
с
@Configuration
class MyConfig {
@Bean
var myController = new com.example.controllers.MyController
}
кажется, что MyController никогда не подключается к сервлету (поведение изменено на 404-NotFound) - при добавлении в WebApplicationContext.