是否有可能在Kotlin做类似的事情?
@Autowired
internal var mongoTemplate: MongoTemplate
@Autowired
internal var solrClient: SolrClient
肯定这是可能的,你有几个选项,我建议使用带注释的构造函数,但是lateinit也可以工作,在某些情况下可能有用:
晚初始化:
@Component
class YourBean {
@Autowired
lateinit var mongoTemplate: MongoTemplate
@Autowired
lateinit var solrClient: SolrClient
}
构造函数:
@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
}
构造函数版本检查bean创建时的所有依赖关系以及所有注入的字段 - val,另一方面,lateinit注入的字段只能是var,并且运行时占用空间很小。要使用构造函数测试类,您不需要反射。
链接:
是的,Kotlin支持Java注释,主要是在Java中。一个问题是主构造函数上的注释需要显式的'constructor'关键字:
来自https://kotlinlang.org/docs/reference/annotations.html
如果需要注释类的主要构造函数,则需要将constructor关键字添加到构造函数声明中,并在其前面添加注释:
class Foo @Inject constructor(dependency: MyDependency) {
// ...
}