Я хочу инициализировать объект repository
в Spring Boot без необходимости превращать его в bean-компонент или свойство Autowired
.
Я просто хочу сделать feedRepository = FeedRepository()
в Kotlin. Почему Spring Boot не позволит мне сделать это? Почему это должно быть автоматическое соединение или bean-компонент?
вот мой код:
@Component
class UriParser() {
@Autowired
lateinit var uriRepository: UriRepository
@Autowired
lateinit var hostRepository: HostRepository
@Autowired
lateinit var feedRepository: FeedRepository
fun parseUri(uri: String) : Feed {
val urlRepository = UriRepository()
val uri = URI(uri)
val uriRecord = uriRepository.save(Uri(scheme = uri.scheme, host = uri.host, port = uri.port))
hostRepository.save(Host(host = uri.host))
return feedRepository.save(Feed(uriId = uriRecord.id))
}
}
Редактировать: хорошо, так что вот лучший контекст о том, почему я не могу автоматически связать вещи. По сути, я делаю это в функции stati c, поэтому у меня нет абсолютно никакого доступа к bean-компонентам или свойствам автопроводки:
@SpringBootApplication
class Application
fun main(args: Array<String>) {
runApplication<Application>(*args)
KafkaScheduler().init()
}
Планировщик Kafka в основном выполняет несколько потоков, которые все слушают темы kafka:
class KafkaScheduler() {
// this doesn't work....
@Autowired
lateinit var feedRepository: FeedRepository
fun init() {
val threads = arrayOf(
{
QueueListener().init()
},
{
PrefetchListener().init()
},
{
FetchListener().init()
}
)
val service = Executors.newFixedThreadPool(threads.size)
for (thread in threads) {
service.submit(thread)
}
}
}
однако я не могу автоматически связать класс KafkaScheduler как bean-компонент в методе stati c, поэтому я не могу сделать так, чтобы компонент или автоиндустрировали какие-либо репозитории, насколько мне известно.