これは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もブラケットにしてみました。
よりきれいですね。
コメントを残す