2016-02-18 25 views
22

Czy można zrobić coś takiego w Kotlin?jak korzystać z adnotacji wiosennych takich jak @Autowired in kotlin?

@Autowired 
internal var mongoTemplate: MongoTemplate 

@Autowired 
internal var solrClient: SolrClient 
+1

próbowałeś? I być nieco bardziej konstruktywnym ... istnieje cały szablon [Spring Boot] (https://kotlinlang.org/docs/tutorials/spring-boot-restful.html), odpowiedź z pewnością brzmi "tak". – mabi

+0

@mabi dziękuję za tutorial link :) – eendroroy

Odpowiedz

53

Na pewno jest to możliwe, masz kilka opcji, proponuję uwagami konstruktora, ale lateinit działa również, a może przydatne w niektórych przypadkach:

Lateinit:

@Component 
class YourBean { 

    @Autowired 
    lateinit var mongoTemplate: MongoTemplate 

    @Autowired 
    lateinit var solrClient: SolrClient 
} 

Konstruktor:

@Component 
class YourBean @Autowired constructor(
    private val mongoTemplate: MongoTemplate, 
    private val solrClient: SolrClient 
) { 
    // code 
} 

Konstruktor z wiosny 4.3:

@Component 
class YourBean(
    private val mongoTemplate: MongoTemplate, 
    private val solrClient: SolrClient 
) { 
    // code 
} 

Konstruktor wersja sprawdzić wszystkie zależności w czas tworzenia fasoli i wszystkie wstrzyknięte pola - val, z drugiej strony mogą być wstrzykiwane późne pola tylko var i ma mały ślad czasu działania. Aby przetestować klasę z contructor, nie potrzebujesz refleksji.

Linki:

  1. Documentation on lateinit
  2. Documentation on constructors
  3. Developing Spring Boot applications with Kotlin
5

Tak, adnotacje java są obsługiwane w Kotlin głównie w Javie. Jeden haczyka jest adnotacje na podstawowym konstruktora wymaga wyraźnej „konstruktora” Słowo kluczowe:

Od https://kotlinlang.org/docs/reference/annotations.html

Jeśli trzeba opisywać główny konstruktor klasy, trzeba dodać słowo kluczowe konstruktora do deklaracja konstruktora i dodać adnotacje przed nim:

class Foo @Inject constructor(dependency: MyDependency) { 
    // ... 
} 
Powiązane problemy