これは2017/12/22時点のIntelliJ IDEA(2017.3)を使用した記事です。
最新版とは異なる可能性がありますのでご注意ください。
最新版とは異なる可能性がありますのでご注意ください。
下記のようなJavaのクラスがあったとします。
@Controller
@Scope("request")
@RequestMapping("/foo/bar")
public class FooBarController: Foo() {
@Autowired
FooBarService fooBarService;
@RequestMapping(method = RequestMethod.GET)
public String foo() {
return fooBarService.doSomething();
}
}
これをkoilinに自動変換するとこうなります。
@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()
}
}
このままだとfooBarServiceのAutowiredが効かずnullのままになってしまいます。
そこで、ここで回答されているように、
@Controller
@Scope("request")
@RequestMapping("/foo/bar")
open class FooBarController(val fooBarService: FooBarService) {
@RequestMapping(method = [RequestMethod.GET])
open fun foo(): String {
return fooBarService.doSomething()
}
}
classとfunにopenをつけることでAutowiredが効くようになります。
ついでに@Autowiredを外してコンストラクタに移動させ、methodのarraysもブラケットにしてみました。
よりきれいですね。
コメント