Java Kotlin中的Spring服务初始流
我试图在Spring/Kotlin中编写一个简单的Redis接口服务,但在理解属性初始化的方式时遇到了一些问题Java Kotlin中的Spring服务初始流,java,spring,spring-boot,kotlin,redis,Java,Spring,Spring Boot,Kotlin,Redis,我试图在Spring/Kotlin中编写一个简单的Redis接口服务,但在理解属性初始化的方式时遇到了一些问题 application.properties文件指定redis的redis.host和redis.port值。然后我想设置一个RedisClient和StatefulRedisConnection对象,以便在内部与助手函数一起使用 我的问题是,尽管在我运行时会编译,但我得到: @Service class RedisService { @Value("\${redis.hos
application.properties
文件指定redis的redis.host
和redis.port
值。然后我想设置一个RedisClient
和StatefulRedisConnection
对象,以便在内部与助手函数一起使用
我的问题是,尽管在我运行时会编译,但我得到:
@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()
}
}
@服务
类再服务{
@值(\${redis.host})
private val host:String=“localhost”
@值(\${redis.port})
专用val端口:Int=6379
private val log=LoggerFactory.getLogger(this::class.java)
私有lateinit var客户端:RedisClient
私有lateinit变量连接:StatefulRedisConnection
@施工后
私有连接(){
log.info(“创建到:[redis://$host:$port]的连接”)
client=RedisClient.create(
create(“redis://$host:$port”)
)
connection=client.connect()
}
}
kotlin.UninitializedPropertyAccessException:lateinit属性连接尚未初始化
设置需要“以编程方式”构建的属性的正确方法是什么。它们需要是带有@Bean
注释或类似注释的函数吗
感谢您提供的任何帮助。请查看
lateinit字段必须是
@Autowired
,连接必须通过@Bean
注释。然后,redisClient.connect()
作为助手方法将在您的@Service
类中使用,类似这样的方法更好:
@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
}
}
@配置
类RedisConfig{
@豆子
有趣的连接(
@值(“\${redis.host}”)主机:字符串,
@Value(“\${redis.port}”)port:String)=RedisClient.create(RedisURI.create(“redis://$host:$port”)).connect()
}
@服务
类RedisService(专用val连接:StatefulRedisConnection){
private val log=LoggerFactory.getLogger(this::class.java)
有趣的连接(){
//在这里使用连接
}
}