Springの小ネタ
ことりんでSpringを使うときにはなにもしないと @Autowired constructor(val xxxx : Xxxxx) みたいに書く必要がある
Javaっぽくかけないかなぁ〜って遊んでみた結果
@SpringBootApplication
@ComponentScan(basePackages = arrayOf("com.makotan.kotlin"))
open class Application : CommandLineRunner {
val hogeService : HogeService by Spring()
override fun run(vararg p0: String?) {
val hoge = hogeService.call("hoge")
println(hoge)
val fuga = hogeService.call("fuga")
println(fuga)
}
companion object {
@JvmStatic fun main(args: Array<String>) {
SpringApplication.run(Application::class.java, *args)
}
}
}
それっぽく出来た!
ちなみにSpringの中身はこんな感じ
class Spring {
companion object Context {
var springContext : ApplicationContext? = null
fun set(springContext : ApplicationContext) {
this.springContext = springContext
}
}
var value : Any? = null
operator fun <T> getValue(thisRef: Any?, property: KProperty<*>): T {
if (value == null) {
value = springContext?.getBean(property.javaGetter?.returnType)
}
return value as T
}
}
@Component
class SpringInitialize @Autowired constructor(val springContext : ApplicationContext) {
@PostConstruct
fun init() {
Spring.set(springContext)
}
}