package Ġme . k uk u . ktor . config Ċ Ċ import Ġio . ktor . server . c io .* Ċ import Ġio . ktor . server . engine .* Ċ import Ġio . ktor . server . routing .* Ċ import Ġme . k uk u . ktor . plugins . module Ċ import Ġme . k uk u . ktor . pojo . K tor Config Ċ import Ġorg . springframework . boot . context . properties . Enable Configuration Properties Ċ import Ġorg . springframework . context . ApplicationContext Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . stereotype . Controller Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġkotlin . reflect . full . declared Member Extension Functions Ċ import Ġkotlin . reflect . full . extension Receiver Parameter Ċ Ċ @ Configuration Ċ @ Enable Configuration Properties ( K tor Config :: class ) Ċ open Ġclass ĠK tor Auto Configuration ( ĊĠĠĠ Ġprivate Ġval Ġk tor Config : ĠK tor Config , ĊĠĠĠ Ġprivate Ġval Ġapplication Context : ĠApplication Context Ċ ) Ġ{ ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġopen Ġfun Ġapplication Engine (): ĠApplication Engine Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġembedded Server ( C IO , Ġport Ġ= Ġk tor Config . port , Ġhost Ġ= Ġk tor Config . host ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnames Ġ= Ġapplication Context . bean Definition Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz List Ġ= Ġmutable ListOf < Class <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( name Ġin Ġnames ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġapplication Context . getType ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clazz ?. is Annotation Present ( Service :: class . java ) Ġ== Ġtrue Ġ|| Ġclazz ?. is Annotation Present ( Component :: class . java ) Ġ== Ġtrue Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz ?. is Annotation Present ( Controller :: class . java ) Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz List . add ( clazz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( clazz Ġin Ġclazz List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= Ġclazz . kotlin . declared Member Extension Functions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( function Ġin Ġfunctions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . extension Receiver Parameter ?. type ?. toString () Ġ== Ġ" io . ktor . server . application . Application ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction . call ( application Context . getBean ( clazz ), Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouting Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( clazz Ġin Ġclazz List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= Ġclazz . kotlin . declared Member Extension Functions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( function Ġin Ġfunctions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . extension Receiver Parameter ?. type ?. toString () Ġ== Ġ" io . ktor . server . routing . Routing ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction . call ( application Context . getBean ( clazz ), Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} Ċ }