当前位置: 首页 > 知识库问答 >
问题:

如何在kotlin中使用类似@Autowired的spring注释?

柴翰藻
2023-03-14

有没有可能在科特林做类似跟随的事情?

@Autowired
internal var mongoTemplate: MongoTemplate

@Autowired
internal var solrClient: SolrClient

共有3个答案

漆雕深
2023-03-14

还可以通过构造函数自动连接依赖项。请记住使用@Configuration,@Component,@Service等注释依赖项

import org.springframework.stereotype.Component

@Component
class Foo (private val dependency: MyDependency) {
    //...
}
轩辕煜
2023-03-14

是的,Kotlin和java一样支持Java注释。一个问题是主构造函数上的注释需要显式的“constructor”关键字:

从…起https://kotlinlang.org/docs/reference/annotations.html

如果需要注释类的主构造函数,需要在构造函数声明中添加constructor关键字,并在它之前添加注释:

class Foo @Inject constructor(dependency: MyDependency) {
  // ...
}
赵骏奇
2023-03-14

在Spring中进行依赖注入的推荐方法是构造函数注入:

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

在Spring 4.3之前,构造函数应该使用自动布线进行显式注释:

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

在极少数情况下,您可能喜欢使用字段注入,您可以在< code>lateinit的帮助下这样做:

@Component
class YourBean {

    @Autowired
    private lateinit var mongoTemplate: MongoTemplate

    @Autowired
    private lateinit var solrClient: SolrClient
}

构造函数注入在bean创建时检查所有依赖项,所有注入的字段都是val,另一方面lateinit注入的字段只能是var,并且运行时开销很小。并且要使用构造函数测试类,您不需要反射。

链接:

  1. lateinit上的文档
  2. 构造函数文档
  3. 使用静态编程语言开发Spring Boot应用程序
 类似资料:
  • 问题内容: 我遇到了一个例子: 我很好奇如何获取集合,因为没有设置方法,而且它是私有的。 问题答案: Java允许上一个字段或方法的访问控制被关断(是的,有一个安全检查到第一通路)经由方法,其是反射框架(二者的一部分Field和从继承)。一旦发现并写入了该字段,其余的工作就变得很简单了。只是一个简单的编程问题。 分享

  • 问题内容: 我有一个使用自动装配的3个不同类的A类 在测试它们时,我只希望将其中两个类(B&C)作为模拟,并让D类在正常运行时可以自动装配,但此代码对我不起作用: 甚至有可能这样做吗? 问题答案: 应该是这样的 如果您不想成为别人,则无需在课堂上做任何事情。您 应具有的正确实例。此外,我认为你需要使用的工作,用正确的设定。因为您没有使用,所以需要使用 MockitoAnnotations.init

  • 我使用的库使用类型使用注释向变量添加约束。例如,如果您想要一个可配置的不透明度(以百分比为单位,由表示),您需要注释类型: 我不能让同一个库工作在相同的kotlin代码。 为了简化问题,让我们自己声明注释和用法: 运行会产生,表明类型上存在注释。 如果我们引入一个新的kotlin类,具有类似的字段和注释类型: 之前的检查,现在在类上: 产生,指示JavaAnnot注释不存在于类型的上,尽管我们显然