Kotlin Spring class 初始化方面

Kotlin Spring class initialization with aspect

我正在尝试在我的 java8 spring 项目中使用 kotlin。 我通过一个一个地替换 classes (java->kotlin) 来做到这一点。

Finder 中我的 class 之一:

Finder.java 有这样的结构:

@Compoment
class Finder {
    private SomeObject someObject;

    Finder() {
        someObject = new SomeObject();
    }

    public void doSomething() { //aspect looks here
        someObject.do();
    }
}

我已经将其替换为Finder.kt

@Compoment
open public class Finder {
    private val someObject : SomeObject

    constructor() {
        someObject = SomeObject()
    }

    public fun doSomething() {  //aspect looks here
        someObject.do() //NPE here
    }

}

我发现在 debuggind 时调用了构造函数,在创建 Finder 实例时创建了 someObject。但是 FinderEnhancerBySpring 生成的 class 实例被自动连接到 Detector 实例。它没有初始化,所以当我尝试访问 someObject 时我遇到了 NPE。

此外,Finder class 还有其他自动装配的字段(为了简化代码,我没有在这里写),它们也没有初始化。

UPD:我在 Finder 的方法之一上找到了方面。当我删除它时,键入自动装配的实例成为 Finder(不是 FinderEnhancerBySpring)并完全初始化。

这里有什么问题吗? (0.13.1514 - 科特林版本)

默认情况下,所有 kotlin 方法都是最终的(说 java),因此我必须允许使用 open 关键字覆盖它:

public open fun doSomething() {  //aspect looks here
    someObject.do()
}