我正在嘗試在 Spring/Kotlin 中編寫一個簡單的 Redis 接口服務,但在理解屬性的初始化方式方面遇到了一些困難。該application.properties文件指定Redis 的redis.host和redis.port值。然后我想設置一個RedisClientandStatefulRedisConnection對象以在內部與輔助函數一起使用。我的問題是,盡管我運行時可以編譯,但我得到:@Serviceclass RedisService { @Value("\${redis.host}") private val host: String = "localhost" @Value("\${redis.port}") private val port: Int = 6379 private val log = LoggerFactory.getLogger(this::class.java) private lateinit var client: RedisClient private lateinit var connection: StatefulRedisConnection<String, String> @PostConstruct private fun setupConnection() { log.info("Creating connection to: [redis://$host:$port]") client = RedisClient.create( RedisURI.create("redis://$host:$port") ) connection = client.connect() }}kotlin.UninitializedPropertyAccessException:lateinit 屬性連接尚未初始化設置需要“以編程方式”構建的屬性的正確方法是什么?它們是否需要是帶@Bean注釋的函數或類似的東西?謝謝你盡你所能的幫助。
2 回答

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
像這樣的事情要好得多:
@Configuration
class RedisConfig {
@Bean
fun getRedisConnection(
@Value("\${redis.host}") host: String,
@Value("\${redis.port}") port: String) = RedisClient.create(RedisURI.create("redis://$host:$port")).connect()
}
@Service
class RedisService(private val connection: StatefulRedisConnection<String?,String?>) {
private val log = LoggerFactory.getLogger(this::class.java)
fun useConnection() {
// use connection here
}
}

忽然笑
TA貢獻1806條經驗 獲得超5個贊
Lateinit字段必須是@Autowired
,并且連接必須通過注釋進行@Bean
。那么作為輔助方法在你的班級redisClient.connect()
中就可以了@Service
添加回答
舉報
0/150
提交
取消