Kotlin 中的 Spring 服务初始化流程

我正在尝试在 Spring/Kotlin 中编写一个简单的 Redis 接口服务,但在理解属性的初始化方式方面遇到了一些困难。


该application.properties文件指定Redis 的redis.host和redis.port值。然后我想设置一个RedisClientandStatefulRedisConnection对象以在内部与辅助函数一起使用。


我的问题是,尽管我运行时可以编译,但我得到:


@Service

class 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注释的函数或类似的东西?


谢谢你尽你所能的帮助。


茅侃侃
浏览 136回答 2
2回答

慕斯709654

像这样的事情要好得多:@Configurationclass RedisConfig {&nbsp; &nbsp; @Bean&nbsp; &nbsp; fun getRedisConnection(&nbsp; &nbsp; &nbsp; &nbsp; @Value("\${redis.host}") host: String,&nbsp; &nbsp; &nbsp; &nbsp; @Value("\${redis.port}") port: String) = RedisClient.create(RedisURI.create("redis://$host:$port")).connect()}@Serviceclass RedisService(private val connection: StatefulRedisConnection<String?,String?>) {&nbsp; &nbsp; private val log = LoggerFactory.getLogger(this::class.java)&nbsp; &nbsp; fun useConnection() {&nbsp; &nbsp; &nbsp; &nbsp; // use connection here&nbsp; &nbsp; }}

忽然笑

Lateinit字段必须是@Autowired,并且连接必须通过注释进行@Bean。那么作为辅助方法在你的班级redisClient.connect()中就可以了@Service
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java