Kotlin数据类

时间:2019-03-26 12:48:30

标签: kotlin

我在Java中有下面的POJO,它在Spring启动应用中用于在应用启动期间从YML注入属性。尝试将应用程序转换为Kotlin,但是当我将POJO转换为数据类时,我很难实现注入的值。

@Component
@ConfigurationProperties("rest")
@Data
public class RestProperties {
    private final Client client = new Client();

    @Data
    public static class Client {
        private int defaultMaxTotalConnections;
        private int defaultMaxConnectionsPerRoute;
        private int defaultReadTimeout;
    }
}

我已经尝试过以下解决方案,但是没有用。

@Component
@ConfigurationProperties("rest")
class RestProperties {
    val client = Client()

    class Client() {
        constructor(
            defaultMaxTotalConnections: Int, 
            defaultMaxConnectionsPerRoute: Int, 
            defaultReadTimeout: Int
        ) : this()
    }
}

@Component
@ConfigurationProperties("rest")
class RestProperties {
    val client = Client()

    class Client {
        var defaultMaxTotalConnections: Int = 50
            set(defaultMaxTotalConnections) {
                field = this.defaultMaxTotalConnections
            }

        var defaultMaxConnectionsPerRoute: Int = 10
            set(defaultMaxConnectionsPerRoute) {
                field = this.defaultMaxConnectionsPerRoute
            }

        var defaultReadTimeout: Int = 15000
            set(defaultReadTimeout) {
                field = this.defaultReadTimeout
            }
    }
}

第二个代码有效,但是值不是从YML注入的。感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

可以将RestProperties类转换为Kotlin,如下所示:

@Component
@ConfigurationProperties("rest")
class RestProperties {
    val client: Client = Client()

    class Client {
        var defaultMaxTotalConnections: Int = 0
        var defaultMaxConnectionsPerRoute: Int = 0
        var defaultReadTimeout: Int = 0
    }
}

请注意,必须按照以下说明在application.yml中添加属性,才能正确注入。

rest:
  client:
    defaultMaxTotalConnections: 1
    defaultMaxConnectionsPerRoute: 2
    defaultReadTimeout: 3

此外,此类提供配置的类通常应使用@Configuration而非@Component进行注释。