L'article original est ici.
Supposons que vous ayez une classe Java comme celle ci-dessous.
@Controller
@Scope("request")
@RequestMapping("/foo/bar")
public class FooBarController: Foo() {
@Autowired
FooBarService fooBarService;
@RequestMapping(method = RequestMethod.GET)
public String foo() {
return fooBarService.doSomething();
}
}
Si vous le convertissez automatiquement en koilin, cela ressemblera à ceci.
@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()
}
}
Si cela est laissé tel quel, Autowired de fooBarService ne fonctionnera pas et restera nul.
Ainsi, comme indiqué dans ici ,
@Controller
@Scope("request")
@RequestMapping("/foo/bar")
open class FooBarController(val fooBarService: FooBarService) {
@RequestMapping(method = [RequestMethod.GET])
open fun foo(): String {
return fooBarService.doSomething()
}
}
Autowired fonctionnera en ajoutant l'ouverture à la classe et le plaisir. J'ai également supprimé @Autowired, je l'ai déplacé vers le constructeur et fait des tableaux de méthodes un crochet. C'est plus beau.
Si vous utilisez kotlin-spring comme décrit dans here, il sera automatiquement ajouté à la classe avec l'annotation d'héritage @Component. Il semble qu'il accordera ouvert.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
}
}
apply plugin: "kotlin-spring" // instead of "kotlin-allopen"
Recommended Posts