Я пытался отладить эту проблему, связанную с Spring, написанную в Scala более недели, и я очень отчаянно пытаюсь обратиться за внешней помощью.По сути, у меня есть приложение с некоторыми функциями поверх Spring, работающее в одном репо, но из-за строгих ограничений на перенос кода, мне нужно переместить этот код в новое репо.
Большую часть времени я отделял в новом репо только начальные основы приложения Spring, следуя этой общей модульной структуре проекта Gradle
da-report
|src
|main
|java
com.abc.da.app
service/
ComService
AppConfig
ComApp
|resources
build.gradle
Однако я продолжал получать услугукласс не сканируется / не подключается автоматически в основном классе приложения по очень странной причине (это настолько непостижимо, что я не мог понять, почему это не должно работать).
Field service in com.abc.da.app.service.ComApp required a bean of type 'com.abc.da.app.service.ComService' that could not be found.
Action:
Consider defining a bean of type 'com.abc.da.app.service.ComService' in your configuration.
PS: заранее извиниться, если я покажу только критическую часть кода (игнорируя операторы импорта и другие конфигурации в файле YAML)
Я * проверил все необходимые аннотации или логикуна основе рабочей версии * (в предыдущем репо) - другими словами, эти аннотации выглядят достаточными для автоматической проводки (но странно, что они не подключены)
Я пытался либо изменить службуРасположение подпакета на том же уровне, что и основной каталог пакета приложения , но оно не работает.
ComService
....
@Service
class ComService [
}
ComApp
...
object ComApp extends App {
val cxt = new SpringApplicationBuilder().sources(classOf[ComApp])).run(args: _*)
println("contain service class? " + cxt.getBean(""))
}
@SpringBootApplication
@Import(Array=(classOf[AppConfig]))
@EnableAutoConfiguration()
class ComApp extends ApplicationRunner {
@Autowired var service: ComService = _
override def run(applicationArguments: applicationArgument) ={
}
}
AppConfig
....
@Configuration
@ComponentScan(basePackages = Array("com.abc.da.app.service"))
class AppConfig {
}
Как уже говорилось, логика полностью игнорируется, чтобы просто проверить, является ли службакласс получает признание.Я действительно ожидал, что любой класс в служебном подпакете будет отсканирован (даже без необходимости включать @ComponentScan, поскольку класс приложения уже находится в корневом пакете)
Итак, я ударился головой, но не мог понять,что вызвало эту странную ошибкуМожет быть из-за именования пакетов?Есть ли какие-либо ограничения на его логику именования и структуру файла, которая вызвала ошибку?
Или я мог бы сделать какую-нибудь глупую, дорогостоящую ошибку (и), связанную с семантикой Spring?