为了账号安全,请及时绑定邮箱和手机立即绑定

Kotlin 中的 Spring 服务初始化流程

Kotlin 中的 Spring 服务初始化流程

茅侃侃 2023-07-28 10:37:21
我正在尝试在 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

    }

}


查看完整回答
反对 回复 2023-07-28
?
忽然笑

TA贡献1806条经验 获得超5个赞

Lateinit字段必须是@Autowired,并且连接必须通过注释进行@Bean。那么作为辅助方法在你的班级redisClient.connect()中就可以了@Service


查看完整回答
反对 回复 2023-07-28
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信