SpringBoot @Autowire 在@Repository 中不工作
SpringBoot @Autowire not working inside @Repository
我有一个带有 gradle 和 kotlin 的多模块 SpringBoot 应用程序,正在尝试 spring-data-r2dbc。如果我在我的存储库 class 上使用 @Repository 注释,@Autowired DatabaseClient 为空。但是,如果我将注释更改为@Component,@Autowired 会起作用并且我会成功调用数据库。知道为什么 @Autowire 不能使用 @Repository 注释吗?
数据库配置class:
@Configuration
open class DatabaseConfiguration(
@Value("${spring.data.mssql.host}") private val host: String,
// @Value("${spring.data.mssql.port}") private val port: Int,
@Value("${spring.data.mssql.database}") private val database: String,
@Value("${spring.data.mssql.username}") private val username: String,
@Value("${spring.data.mssql.password}") private val password: String)
: AbstractR2dbcConfiguration() {
@Bean
override fun connectionFactory(): ConnectionFactory {
return MssqlConnectionFactory(
MssqlConnectionConfiguration.builder()
.host(host)
//.port(port)
.database(database)
.username(username)
.password(password).build()
)
}
}
主要class:
@SpringBootApplication
@EnableR2dbcRepositories
class MultigradleApplication
存储库class(在“数据”模块中):
@Repository
open class TestRepo() {
@Autowired
lateinit var client: DatabaseClient
fun getAll() : Flux<PersonDTO> {
return client.execute("SELECT * FROM Person.Person")
.`as`(PersonDTO::class.java)
.fetch()
.all()
}
}
问题是我将 PersonService 作为它的 IPersonService 接口注入到我的 Controller 中,但是我没有 TestRepo 的接口并直接注入它。当我将 ITestRepo 接口添加到 TestRepo 并将其作为 ITestRepo 注入到服务中时,一切都开始工作了。
我有一个带有 gradle 和 kotlin 的多模块 SpringBoot 应用程序,正在尝试 spring-data-r2dbc。如果我在我的存储库 class 上使用 @Repository 注释,@Autowired DatabaseClient 为空。但是,如果我将注释更改为@Component,@Autowired 会起作用并且我会成功调用数据库。知道为什么 @Autowire 不能使用 @Repository 注释吗?
数据库配置class:
@Configuration
open class DatabaseConfiguration(
@Value("${spring.data.mssql.host}") private val host: String,
// @Value("${spring.data.mssql.port}") private val port: Int,
@Value("${spring.data.mssql.database}") private val database: String,
@Value("${spring.data.mssql.username}") private val username: String,
@Value("${spring.data.mssql.password}") private val password: String)
: AbstractR2dbcConfiguration() {
@Bean
override fun connectionFactory(): ConnectionFactory {
return MssqlConnectionFactory(
MssqlConnectionConfiguration.builder()
.host(host)
//.port(port)
.database(database)
.username(username)
.password(password).build()
)
}
}
主要class:
@SpringBootApplication
@EnableR2dbcRepositories
class MultigradleApplication
存储库class(在“数据”模块中):
@Repository
open class TestRepo() {
@Autowired
lateinit var client: DatabaseClient
fun getAll() : Flux<PersonDTO> {
return client.execute("SELECT * FROM Person.Person")
.`as`(PersonDTO::class.java)
.fetch()
.all()
}
}
问题是我将 PersonService 作为它的 IPersonService 接口注入到我的 Controller 中,但是我没有 TestRepo 的接口并直接注入它。当我将 ITestRepo 接口添加到 TestRepo 并将其作为 ITestRepo 注入到服务中时,一切都开始工作了。