package Ġcom . example . library . rest ful Ċ Ċ import Ġjava . lang . reflect . Invocation Handler Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . lang . reflect . Proxy Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ open Ġclass ĠHi Rest ful Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠbaseUrl : ĠString , ĊĠĠĠ Ġprivate Ġval Ġcall Factory : ĠHi Call . Factory Ċ ) Ġ{ ĊĠĠĠ Ġ// åŃĺåĤ¨ æĭ ¦ æĪª åĻ¨ çļĦ éĽĨåĲĪ ĊĠĠĠ Ġprivate Ġvar Ġintercept ors : ĠMutable List < Hi Interceptor > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ// åŃĺåĤ¨ method åĴĮ method çļĦ è§£æŀĲ åĻ¨ ĊĠĠĠ Ġprivate Ġvar Ġmethod Service : ĠConcurrent HashMap < Method , ĠMethod Parser > Ġ= ĠConcurrent HashMap () ĊĊĠĠĠ Ġ// å¯¹ call çļĦ ä»£çĲĨ æĵ į çº µ ĊĠĠĠ Ġprivate Ġvar Ġscheduler : ĠScheduler Ġ= ĠScheduler ( call Factory , Ġintercept ors ) ĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* Ġæ·»åĬł æĭ ¦ æĪª åĻ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Interceptor ( interceptor : ĠHi Interceptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġintercept ors . add ( interceptor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* Ġæł¹æį® æİ¥åı£ å¯¹è±¡ è¿ĶåĽŀ æİ¥åı£ çļĦ ä»£çĲĨ å¯¹è±¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġcreate ( service : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProxy . new Proxy Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . class Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < Class < *> >( service ), Ġobject Ġ: ĠInvocation Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( proxy : ĠAny , Ġmethod : ĠMethod , Ġargs : ĠArray < out ĠAny >? ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmethod Parser Ġ= Ġmethod Service [ method ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method Parser Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĸ¹æ³ķ çļĦ æ³¨è§£ ï¼Į åıĤæķ° Ġè¿ĶåĽŀ ç±»åŀĭ çŃī çļĦ è§£æŀĲ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Parser Ġ= ĠMethod Parser . parse ( baseUrl , Ġmethod ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Service [ method ] Ġ= Ġmethod Parser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĢļè¿ĩ è§£æŀĲ åĪ° çļĦæķ°æį® åĪĽå»º request ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġmethod Parser . new Request ( method , Ġargs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĢļè¿ĩ ä»£çĲĨ call è¿Ľè¡Į å¯¹ è¯·æ±Ĥ çļĦ æĭ ¦ æĪª å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġscheduler . new Call ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠT ĊĠĠĠ Ġ} Ċ }