Инициализация класса Kotlin Spring с аспектом

Я пытаюсь использовать kotlin в своем весеннем проекте java8. Я делаю это, заменяя классы (java-> kotlin) один за другим.

Один из моих классов в Finder:

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
    }

}

Во время отладки я обнаружил, что этот конструктор вызывается, а некоторый объект создается при создании экземпляра Finder. Но сгенерированный FinderEnhancerBySpring экземпляр класса был автоматически привязан к экземпляру Detector. Он не был инициализирован, поэтому у меня есть NPE, когда я пытаюсь получить доступ к некоторому объекту.

Также в классе Finder есть другие автосвязанные поля (для упрощения кода я их здесь не писал), они также не были инициализированы.

UPD: Нашел аспект по методу Finder. Когда я удалил его, тип экземпляра с автоматическим подключением стал Finder (а не FinderEnhancerBySpring) и полностью инициализирован.

Что здесь может быть не так? (0.13.1514 - версия котлина)


person kosbr    schedule 26.09.2015    source источник


Ответы (1)


Все методы kotlin являются окончательными (говоря на языке java) по умолчанию, поэтому я должен разрешить переопределить их с помощью ключевого слова open:

public open fun doSomething() {  //aspect looks here
    someObject.do()
} 
person kosbr    schedule 26.09.2015
comment
Было ли это решением проблемы? Если это так, вы можете принять свой собственный ответ, чтобы этот вопрос выглядел более законченным. - person Jayson Minard; 07.01.2016