Kotlin-Spring Boot 混合开发 @Value 注解的使用

在 kotlin 和 Java 的混合开发中,偶尔会用到 Spring Boot 的 @Value() 这个注解, 下面记录一下 kotlin 中,使用 Spring Boot 注入属性的几种方式.

环境

假设,在 Spring Boot 的 application.yml 中有这样的配置

1
2
3
spring:
application:
name: testApp

这样的配置要怎么注入到实体类中的属性呢?

@Value 注解

第一种方式,使用@Value 这个注解,在Java中的写法如下:

1
2
3
4
5
@Component
class Test{
@Value("${spring.application.name}")
private String appName;
}

对应的 kotlin 中, 代码如下:

1
2
3
4
5
6
7
8
@Component
class SentinelConfig(
@Value("\${spring.application.name}")
val appName: String
) {

// ....
}

kotlin 的写法有几点和Java不一样的

  • 要注入的参数必须声明在 kotlin 的构造中,声明在类中是不起作用的.
  • kotlin 中的 $ 是保留字,需要转义才能使用.

@ConfigurationProperties 注解

@ConfigurationProperties 这个注解, Java 的用法就不再介绍了, kotlin 中,代码如下:

1
2
3
4
5
6
@Component
@ConfigurationProperties(prefix = "xxx.xxx.xx")
data class Properties(
val xxx: String
val yyy: String
)

或者

1
2
3
4
5
6
@Component
@ConfigurationProperties(prefix = "xxx.xxx.xx")
class Properties(){
lateinit var xxx: String
lateinit var yyy: String
}

下面这种 lateinit 的方式我没有试过, 但是使用 @Value 注解和 lateinit 这种方式注入是行不通的.

常用的属性注入就这些,先记到这儿