2016-02-18 2 views
22

Можно ли сделать что-то вроде следующего в Котлин?Как использовать весенние аннотации, например @Autowired в kotlin?

@Autowired 
internal var mongoTemplate: MongoTemplate 

@Autowired 
internal var solrClient: SolrClient 
+1

вы пробовали? И чтобы быть немного более конструктивным, есть целый [Spring Boot template] (https://kotlinlang.org/docs/tutorials/spring-boot-restful.html), ответ, безусловно, «да». – mabi

+0

@mabi благодарю вас за учебную ссылку :) – eendroroy

ответ

53

Конечно, это возможно, у вас есть несколько вариантов, я предлагаю аннотированный конструктор, но lateinit также работает, и, возможно, полезно в некоторых случаях:

Lateinit:

@Component 
class YourBean { 

    @Autowired 
    lateinit var mongoTemplate: MongoTemplate 

    @Autowired 
    lateinit var solrClient: SolrClient 
} 

Constructor:

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

Конструктор с Spring 4.3:

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

Конструктор версии проверка всех зависимостей в время создания бина и все введенные поля - val, с другой стороны, вложенные поля lateinit могут быть только var, и имеют небольшой промежуток времени выполнения. И для тестирования класса с помощью contructor вам не нужно размышлять.

Ссылки:

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

Да, аннотации java поддерживаются в Котлине в основном как в Java. Один Гоча является аннотаций на первичном конструкторе требует явного «конструктор» ключевое слово:

От https://kotlinlang.org/docs/reference/annotations.html

Если вам нужно аннотировать первичный конструктор класса, необходимо добавить конструктор ключевое слово в конструктор декларации, а также добавлять аннотации перед ним:

class Foo @Inject constructor(dependency: MyDependency) { 
    // ... 
} 
Смежные вопросы