Der Originalartikel ist hier.
Angenommen, Sie haben eine Java-Klasse wie die folgende.
@Controller
@Scope("request")
@RequestMapping("/foo/bar")
public class FooBarController: Foo() {
@Autowired
FooBarService fooBarService;
@RequestMapping(method = RequestMethod.GET)
public String foo() {
return fooBarService.doSomething();
}
}
Wenn Sie dies automatisch in Koilin konvertieren, sieht es so aus.
@Controller
@Scope("request")
@RequestMapping("/foo/bar")
class FooBarController {
@Autowired
internal var fooBarService: FooBarService? = null
@RequestMapping(method = arrayOf(RequestMethod.GET))
fun foo(): String {
return fooBarService!!.doSomething()
}
}
Wenn dies unverändert bleibt, funktioniert Autowired von fooBarService nicht und bleibt null.
Wie in hier beantwortet,
@Controller
@Scope("request")
@RequestMapping("/foo/bar")
open class FooBarController(val fooBarService: FooBarService) {
@RequestMapping(method = [RequestMethod.GET])
open fun foo(): String {
return fooBarService.doSomething()
}
}
Autowired funktioniert, indem es offen für Unterricht und Spaß ist. Ich habe auch @Autowired entfernt, es in den Konstruktor verschoben und die Methodenarrays zu einer Klammer gemacht. Es ist schöner.
Wenn Sie kotlin-spring wie in [hier] beschrieben verwenden (https://kotlinlang.org/docs/reference/compiler-plugins.html#spring-support), wird es der Klasse automatisch mit der Vererbungsanmerkung @Component hinzugefügt. Es scheint, dass es offen gewähren wird.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
}
}
apply plugin: "kotlin-spring" // instead of "kotlin-allopen"
Recommended Posts