package Ġink . an ur . inject Ċ Ċ import Ġcom . google . common . collect . Lists Ċ import Ġink . an ur . exception . Duplicate Bean Exception Ċ import Ġink . an ur . exception . K an ashi Exception Ċ import Ġink . an ur . exception . N igate Exception Ċ import Ġink . an ur . exception . NoSuch Bean Exception Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . net . Jar URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . util . HashSet Ċ import Ġkotlin . reflect . full . declared Member Properties Ċ import Ġkotlin . reflect . full . member Functions Ċ import Ġkotlin . reflect . jvm . is Accessible Ċ import Ġkotlin . reflect . jvm . java Field Ċ import Ġkotlin . reflect . jvm . java Type Ċ import Ġkotlin . system . exit Process Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠAn ur ĠI j uo Kar u K as Ġon Ġ 2 0 2 0 / 2 / 2 3 Ċ Ġ* Ċ Ġ* Ġ æī«æıı ç³»åĪĹ Ċ Ġ*/ Ċ object ĠN igate Ġ{ ĊĊĠĠĠ Ġclass ĠN igate Bean Container Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠUN DEFINE _ ALIAS Ġ= Ġ" UN DEFINE " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ å¿ħé¡» å®ĮæĪĲ åĪĿå§ĭ æ³¨åĨĮ æīįèĥ½ åģļ å¾Īå¤ļ äºĭ æĥħ ï¼Į åĲ¦åĪĻ çĽ´æİ¥ æĬĽ åĩº å¼Ĥå¸¸ ï¼Ī åľ¨ åĪĿå§ĭåĮĸ éĺ¶æ®µ ï¼Į < cl init > ĠåĴĮ Ġ< init > Ġä½¿çĶ¨ æ³¨ åħ¥ ä¼ļ çī Ļ çĻ½ ï¼ģï¼ģ ï¼ģ ï¼ī ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġover _ registry : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġbean Ġ åĲįåŃĹ ä¸İ Ġbean ĠçļĦ æĺłå°Ħ ï¼Į åıªèĥ½ ä¸Ģ å¯¹ ä¸Ģ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNAME _ TO _ BE AN _ MAPPING Ġ= Ġmutable Map Of < String , ĠAny >() ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġbean Ġ åĲįåŃĹ ä¸İ Ġbean ĠçļĦ æĺłå°Ħ ï¼Į åıªèĥ½ ä¸Ģ å¯¹ ä¸Ģ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBE AN _ TO _ NAME _ MAPPING Ġ= Ġmutable Map Of < Any , ĠString >() ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġbean Ġ ç±»åŀĭ ä¸İ Ġbean ĠçļĦ æĺłå°Ħ ï¼Į åı¯ä»¥ ä¸Ģ å¯¹ å¤ļ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBE AN _ CLASS _ MAPPING Ġ= Ġmutable Map Of < Class <* >, ĠMutable Set < Any >>() ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åŃĺåĤ¨ ĠâĢľ ç±» âĢĿ Ġ ä¸İ åħ¶ ĠâĢľ ç±» å®ļä¹ī âĢĿ ĠçļĦ æĺłå°Ħ éĽĨåĲĪ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBE AN _ DEFINITION _ MAPPING Ġ= Ġmutable Map Of < String , ĠN igate Bean Definition >() ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åŃĺåĤ¨ æİ¥åı£ ç±» ä¸İ åħ¶ ĠâĢľ å®ŀçİ° ä»¬ âĢĿ ĠçļĦ æĺłå°Ħ éĽĨåĲĪ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINTER FACE _ MAPPING Ġ= Ġmutable Map Of < Class <* >, ĠMutable Set < Class <* >> >() ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ å»¶ è¿ Ł åĬłè½½ çļĦ ĠBE AN ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠL AZ Y _ POST CONTROL _ BE AN Ġ= Ġmutable Map Of < Any , ĠAny >() ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ å·²ç»ı è¿Ľè¡Į äºĨ Ġpost Control ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠHAS _ BE EN _ POST CONTROL Ġ= Ġmutable Set Of < Any >() ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ éģ¿åħį åĽłä¸º è·¯å¾Ħ éĹ®é¢ĺ å¯¼èĩ´ åĪĿå§ĭåĮĸ éĩįå¤į æī«æıı ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINIT _ DUPLIC ATE _ CLEAN ER Ġ= Ġmutable Set Of < String >() ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġauto Register ( path : ĠString , Ġclazz : ĠClass <* >, Ġanno : ĠN igate Bean , Ġfrom Jar : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( INIT _ DUPLIC ATE _ CLEAN ER . add ( path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġregister ( clazz . newInstance (), Ġanno . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBE AN _ DEFINITION _ MAPPING [ name ] Ġ= ĠN igate Bean Definition ( from Jar , Ġpath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æ³¨åĨĮ ä¸Ģä¸ª bean ï¼Į ä¼ĺåħĪ åıĸ Ġalias Ġ åıĸ ä¸įåĪ° åĪĻ ä½¿çĶ¨ Ġbean ĠçļĦ Ġsimple Name ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġregister ( bean : ĠAny , Ġalias : ĠString ? Ġ= Ġnull ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġbean . java Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Name Ġ= Ġif Ġ( alias Ġ== Ġnull Ġ|| Ġalias Ġ== ĠUN DEFINE _ ALIAS ) Ġclazz . simple Name Ġelse Ġalias ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( NAME _ TO _ BE AN _ MAPPING [ actual Name ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDuplicate Bean Exception (" bean Ġ$ clazz Ġ åŃĺåľ¨ éĩįå¤į æ³¨åĨĮ çļĦ æĥħåĨµ ï¼Į è¯· ä½¿çĶ¨ Ġ@ N igate Bean ( name Ġ= Ġalias ) Ġä¸º åħ¶ä¸Ń ä¸Ģä¸ª èµ· åĪ« åĲį ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠNAME _ TO _ BE AN _ MAPPING [ actual Name ] Ġ= Ġbean ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBE AN _ TO _ NAME _ MAPPING [ bean ] Ġ= Ġactual Name ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBE AN _ CLASS _ MAPPING . compute ( bean . java Class ) Ġ{ Ġ_, Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġv Ġ?: Ġmutable Set Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset . add ( bean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . interfaces . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINTER FACE _ MAPPING . compute ( it ) Ġ{ Ġ_, Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġv Ġ?: Ġmutable Set Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset . add ( clazz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactual Name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< T > Ġget Bean By Class First Then Name ( clazz : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠT ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġget Bean By Class ( clazz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠN igate . getBean ByName ( clazz . simple Name ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNoSuch Bean Exception (" æĹłæ³ķ æł¹æį® ç±» Ġ${ clazz . simple Name } Ġ æī¾åĪ° åĶ¯ä¸Ģ çļĦ ĠBean ĠæĪĸ Ġ æĹłæ³ķ æł¹æį® åĲįåŃĹ Ġ${ clazz . simple Name } Ġ æī¾åĪ° æĮĩå®ļçļĦ ĠBean Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Bean ByName ( name : ĠString ): ĠAny Ġ= ĠNAME _ TO _ BE AN _ MAPPING [ name ] Ġ?: Ġthrow ĠNoSuch Bean Exception (" bean Ġnamed Ġ$ name Ġis Ġnot Ġmanaged ") ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġget Bean By Class ( clazz : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= ĠBE AN _ CLASS _ MAPPING [ clazz ] Ġ?: Ġthrow ĠNoSuch Bean Exception (" bean Ġwith Ġtype Ġ$ clazz Ġis Ġnot Ġmanaged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDuplicate Bean Exception (" bean Ġ$ clazz Ġ åŃĺåľ¨ å¤ļ å®ŀä¾ĭ çļĦ æĥħåĨµ ï¼Į è¯· ä½¿çĶ¨ Ġ@ N igate Inject ( name Ġ= Ġalias ) Ġ éĢīæĭ© æ³¨ åħ¥ åħ¶ ä¸ŃçļĦ æŁĲä¸ª Ġbean ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( l . first ()) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġä¸º æŁĲä¸ª bean æ³¨ åħ¥ æĪĲåĳĺ åıĺéĩı ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġinject ( inject ed : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Property Ġin Ġinjected :: class . declared Member Properties ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( annotation Ġin Ġk Property . annotations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation . annotation Class Ġ== ĠN igate Inject :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġas ĠN igate Inject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjava Field Ġ= Ġk Property . java Field !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġk Property . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Class Ġ= Ġk Property . returnType . java Type Ġas ĠClass < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinjection : ĠAny ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation . name Ġ== ĠUN DEFINE _ ALIAS ) Ġ{// Ġå¦Ĥæŀľ æ²¡æľī æĮĩå®ļ åĪ« åĲį æ³¨ åħ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Class . is Interface ) Ġ{// Ġå¦Ĥæŀľ æĺ¯ Ġ æİ¥åı£ ç±»åŀĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Set Ġ= ĠINTER FACE _ MAPPING [ field Class ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mutable Set Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNoSuch Bean Exception (" ä¸įåŃĺåľ¨ æİ¥åı£ ç±»åŀĭ ä¸º Ġ$ field Class ĠçļĦ ĠBean ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mutable Set . size Ġ== Ġ 1 ) Ġ{// Ġå¦Ĥæŀľ åıªæľī ä¸Ģä¸ª å®ŀçİ° ï¼Į åĪĻ æ³¨ åħ¥ æŃ¤ å®ŀçİ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinjection Ġ= Ġget Bean By Class First Then Name ( mutable Set . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( annotation . use Local First ) Ġ{// Ġå¦Ĥæŀľ ä¼ĺåħĪ ä½¿çĶ¨ æľ¬åľ° åĨĻ çļĦ ç±» ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Bean Ġ= Ġmutable Set . take If Ġ{ ĠBE AN _ DEFINITION _ MAPPING [ it . java Class . simple Name ]?. from Jar Ġ== Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Bean Ġ== Ġnull Ġ-> Ġthrow ĠDuplicate Bean Exception (" bean Ġ${ inject ed . java Class } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġå°Ĩ æ³¨ åħ¥ çļĦ å±ŀæĢ§ Ġ$ fieldName Ġä¸º æİ¥åı£ ç±»åŀĭ ï¼Į ä¸Ķ åŃĺåľ¨ å¤ļä¸ª æĿ¥ èĩª ãĢĲ ä¾Ŀèµĸ ãĢĳ çļĦ åŃĲ ç±» å®ŀçİ° ï¼Į è¯· æĶ¹ çĶ¨ Ġ@ N igate Inject ( name ) ĠæĿ¥ æĮĩå®ļ åĪ« åĲį æ³¨ åħ¥ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Bean . size Ġ> Ġ 1 Ġ-> Ġthrow ĠDuplicate Bean Exception (" bean Ġ${ inject ed . java Class } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġå°Ĩ æ³¨ åħ¥ çļĦ å±ŀæĢ§ Ġ$ fieldName Ġä¸º æİ¥åı£ ç±»åŀĭ ï¼Į ä¸Ķ åŃĺåľ¨ å¤ļä¸ª æĿ¥ èĩª ãĢĲ æľ¬åľ° ãĢĳ çļĦ åŃĲ ç±» å®ŀçİ° ï¼Į è¯· æĶ¹ çĶ¨ Ġ@ N igate Inject ( name ) ĠæĿ¥ æĮĩå®ļ åĪ« åĲį æ³¨ åħ¥ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġinjection Ġ= Ġget Bean By Class First Then Name ( mutable Set . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{// Ġå¦Ĥæŀľ ä¸įæĺ¯ æİ¥åı£ ç±»åŀĭ ï¼Į çĽ´æİ¥ æł¹æį® ç±» æĿ¥ æ³¨ åħ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinjection Ġ= Ġget Bean By Class ( field Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{// Ġå¦Ĥæŀľ æĮĩå®ļ äºĨ åĪ« åĲį ï¼Į çĽ´æİ¥ æł¹æį® åĪ« åĲį æ³¨ åħ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinjection Ġ= Ġget Bean ByName ( annotation . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Field . set ( inject ed , Ġinjection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Managed Beans (): ĠMutable Collection < Any > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNAME _ TO _ BE AN _ MAPPING . values ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpost Construct ( beans : ĠMutable Collection < Any >, ĠonStart Up : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremoves Ġ= Ġmutable ListOf < Any >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bean Ġin Ġbe ans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( member Function Ġin Ġbean :: class . member Functions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( annotation Ġin Ġmember Function . annotations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation . annotation Class Ġ== ĠN igate Post Construct :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġas ĠN igate Post Construct ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdepends On Ġ= ĠNAME _ TO _ BE AN _ MAPPING [ annotation . depends On ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation . depends On Ġ!= Ġ"- NONE -" Ġ&& Ġ! HAS _ BE EN _ POST CONTROL . contains ( depends On )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠNoSuch Bean Exception ("$ bean Ġ ä¾Ŀèµĸ çļĦ Ġbean Ġ${ annotation . depends On } Ġä¸į åŃĺåľ¨ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL AZ Y _ POST CONTROL _ BE AN [ bean ] Ġ= Ġdepends On ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( LA ZY _ POST CONTROL _ BE AN [ depends On ] Ġ!= Ġnull Ġ&& ĠL AZ Y _ POST CONTROL _ BE AN [ depends On ] Ġ== Ġbean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN igate Exception (" bean Ġ${ BE AN _ TO _ NAME _ MAPPING [ depends On ]} Ġ ä¸İ Ġ${ BE AN _ TO _ NAME _ MAPPING [ bean ]} ĠçļĦ Ġ@ N igate Post Construct Ġ æŀĦ æĪĲ äºĨ å¾ªçİ¯ ä¾Ŀèµĸ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHAS _ BE EN _ POST CONTROL . add ( bean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremoves . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Function . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Function . call ( bean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" class Ġ[ ${ bean :: class }] Ġinvoke Ġpost Ġconstruct Ġmethod Ġ[ ${ member Function . name }] Ġerror Ġ: Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( onStart Up ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠBE AN _ TO _ NAME _ MAPPING [ bean ] Ġ?: Ġthrow ĠNoSuch Bean Exception (" æĹłæ³ķ æł¹æį® ç±» Ġ${ bean . java Class . simple Name } Ġ æī¾åĪ° åĶ¯ä¸Ģ çļĦ ĠBean Ġ æī¾åĪ° æĮĩå®ļçļĦ ĠBean Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Bean Post Construct . add ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( remove Ġin Ġremoves ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL AZ Y _ POST CONTROL _ BE AN . remove ( remove ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( LA ZY _ POST CONTROL _ BE AN . keys . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Construct ( LA ZY _ POST CONTROL _ BE AN . keys , ĠonStart Up ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġafter Boot Str ap ( beans : ĠMutable Collection < Any >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bean Ġin Ġbe ans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( member Function Ġin Ġbean :: class . member Functions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( annotation Ġin Ġmember Function . annotations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation . annotation Class Ġ== ĠN igate After Boot Str ap :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġas ĠN igate After Boot Str ap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Function . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Function . call ( bean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" class Ġ[ ${ bean :: class }] Ġinvoke Ġafter Ġbootstrap Ġmethod Ġ[ ${ member Function . name }] Ġerror Ġ: Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠBE AN _ TO _ NAME _ MAPPING [ bean ] Ġ?: Ġthrow ĠNoSuch Bean Exception (" æĹłæ³ķ æł¹æį® ç±» Ġ${ bean . java Class . simple Name } Ġ æī¾åĪ° åĶ¯ä¸Ģ çļĦ ĠBean Ġ æī¾åĪ° æĮĩå®ļçļĦ ĠBean Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Bean Post Construct . add ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Classes ( package Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġpackage Path . replace (".", Ġ"/") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresources Ġ= ĠThread . currentThread (). context ClassLoader . getResources ( path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( resources . hasMore Elements ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġresources . nextElement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprotocol Ġ= Ġurl . protocol ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" jar ". equals ( protocol , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Jar Classes ( url , Ġpackage Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" file ". equals ( protocol , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetFile Classes ( url , Ġpackage Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ file è·¯å¾Ħ ä¸ĭçļĦ class æĸĩä»¶ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetFile Classes ( url : ĠURL , Ġpackage Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġurl . file ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠFile ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdir . list () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( class Path Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( class Path . endsWith (". class ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"$ package Path .${ class Path . replace (". class ", Ġ"") }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister By Class Path ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Classes ("$ package Path .$ class Path ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ä½¿çĶ¨ Jar URLConnection ç±» èİ·åıĸ è·¯å¾Ħ ä¸ĭçļĦ æīĢæľī ç±» ĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Jar Classes ( url : ĠURL , Ġpackage Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconn Ġ= Ġurl . open Connection () Ġas ĠJar URLConnection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjar File Ġ= Ġconn . jar File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġjar File . entries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( entries . hasMore Elements ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjar Entry Ġ= Ġentries . nextElement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġjar Entry . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . contains (". class ") Ġ&& Ġname . replace ("/ ". to Regex (), Ġ". "). startsWith ( package Path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġname . substring ( 0 , Ġname . lastIndexOf (". ")). replace ("/", Ġ". ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister By Class Path ( className ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġregister By Class Path ( class Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Class Ġ= ĠClass . forName ( class Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( annotation Ġin Ġa Class . annotations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation . annotation Class Ġ== ĠN igate Bean :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġas ĠN igate Bean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbean Container . auto Register ( class Path , Ġa Class , Ġannotation , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdo Scan () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Classes (" ink . an ur ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠN igate Bean Definition ( ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġfrom Jar Ġ ä»£è¡¨ æŃ¤ å®ŀçİ° æĺ¯ æľī é»ĺè®¤ çļĦ å®ŀçİ° èĢĮä¸Ķ å®ŀçİ° åľ¨ ç»§æī¿ çļĦ maven éĩĮ å°± å·²ç»ı åĨĻ å¥½ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġfrom Jar : ĠBoolean , ĊĊĠĠĠĠĠĠĠ Ġval Ġpath : ĠString ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbean Ġ å®¹åĻ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġbean Container Ġ= ĠN igate Bean Container () ĊĊĠĠĠ Ġprivate Ġval Ġhas Bean Post Construct : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("\ n Ġ__ Ġ Ġ_ ĠĠ Ġ____ Ġ Ġ____ ĠĠĠ Ġ____ Ġ Ġ__ ___ Ġ__ Ġ__ Ġ Ġ____ Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"| Ġ Ġ| / Ġ] Ġ/ ĠĠĠ Ġ|| ĠĠĠ Ġ\\ Ġ Ġ/ ĠĠĠ Ġ| / Ġ___ / | Ġ Ġ| Ġ Ġ|| ĠĠĠ Ġ|\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"| Ġ Ġ' Ġ/ Ġ| Ġ Ġo Ġ Ġ|| Ġ Ġ_ Ġ Ġ|| Ġ Ġo Ġ Ġ( ĠĠ Ġ\ \_ Ġ| Ġ Ġ| Ġ Ġ| Ġ| Ġ Ġ| Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"| ĠĠĠ Ġ\\ Ġ| ĠĠĠĠ Ġ|| Ġ Ġ| Ġ Ġ|| ĠĠĠĠ Ġ| \\ __ Ġ Ġ|| Ġ Ġ_ Ġ Ġ| Ġ| Ġ Ġ| Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"| ĠĠĠĠ Ġ|| Ġ Ġ_ Ġ Ġ|| Ġ Ġ| Ġ Ġ|| Ġ Ġ_ Ġ Ġ| / Ġ Ġ\\ Ġ|| Ġ Ġ| Ġ Ġ| Ġ| Ġ Ġ| Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"| Ġ Ġ. Ġ Ġ|| Ġ Ġ| Ġ Ġ|| Ġ Ġ| Ġ Ġ|| Ġ Ġ| Ġ Ġ| \\ ĠĠĠ Ġ|| Ġ Ġ| Ġ Ġ| Ġ| Ġ Ġ| Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"| __| \\ _ || __| __ || __| __ || __| __| Ġ\\ ___ || __| __ || ____ |\ n \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVer : Ġ 0 . 0 . 1 ĠAlpha \ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate Ġ==> ĠRegister ing .. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbean Container . do Scan () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbean Container . over _ registry Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Beans Ġ= Ġbean Container . get Managed Beans () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate Ġ==> ĠRegister Ġcomplete ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate Ġ==> ĠInject ing .. ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bean Ġin Ġall Beans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbean Container . inject ( bean ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate Ġ==> ĠInject Ġcomplete ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate Ġ==> ĠInv oking Ġpost Construct .. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbean Container . post Construct ( all Beans , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate Ġ==> ĠInvoke Ġpost Construct Ġcomplete ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate Ġ==> ĠRegister ing Ġlistener .. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn igate Listener Service Ġ= Ġget Bean By Class ( N igate Listener Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bean Ġin Ġall Beans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn igate Listener Service . register Listen Event ( bean ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate Ġ==> ĠRegister Ġcomplete ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate ĠStarted Ġin Ġ${ ( System . currentTimeMillis () Ġ- Ġstart ) Ġ/ Ġ 1 0 0 0 f } Ġseconds ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" N igate Ġ==> ĠNotify Ġafter Ġbootstrap ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbean Container . after Boot Str ap ( all Beans ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlazy Init ( inject ed : ĠAny ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġget Bean By Class ( clazz : ĠClass < T >): ĠT Ġ= Ġbean Container . getBean By Class ( clazz ) ĊĊĠĠĠ Ġfun Ġget Bean ByName ( name : ĠString ): ĠAny Ġ= Ġbean Container . getBean ByName ( name ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æ³¨åĨĮ æŁĲä¸ª bean ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġregister To N igate ( inject ed : ĠAny , Ġalias : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! bean Container . over _ registry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠK an ashi Exception (" æļĤ æĹ¶ ä¸į æĶ¯æĮģ åľ¨ åĪĿå§ĭåĮĸ å®ĮæĪĲ åīį è¿Ľè¡Į æŀĦéĢł æ³¨ åħ¥ ï¼ģ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew ArrayList Ġ= ĠLists . newArrayList ( inject ed ) ĊĠĠĠĠĠĠĠ Ġbean Container . register ( inject ed , Ġalias ) ĊĠĠĠĠĠĠĠ Ġbean Container . inject ( inject ed ) ĊĠĠĠĠĠĠĠ Ġbean Container . post Construct ( newArrayList , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbean Container . after Boot Str ap ( newArrayList ) ĊĠĠĠĠĠĠĠ Ġget Bean By Class ( N igate Listener Service :: class . java ). register Listen Event ( inject ed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åįķ çº ¯ çļĦ æ³¨ åħ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinject Only ( inject ed : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbean Container . inject ( inject ed ) ĊĠĠĠ Ġ} Ċ }