package Ġorg . gob lin framework . queue . producer . processor Ċ Ċ import Ġorg . gob lin framework . api . annotation . Singleton Ċ import Ġorg . gob lin framework . core . container . Spring Container Bean Post Processor Ċ import Ġorg . gob lin framework . core . util . Collection Utils Ċ import Ġorg . gob lin framework . core . util . G ob lin Field Ċ import Ġorg . gob lin framework . core . util . Reflection Utils Ċ import Ġorg . gob lin framework . queue . api . Queue Message Producer Ċ import Ġorg . gob lin framework . queue . api . Queue Producer Ċ import Ġorg . gob lin framework . queue . producer . Default Queue Message Producer Ċ import Ġorg . gob lin framework . queue . producer . Default Queue Producer Ċ import Ġorg . gob lin framework . queue . producer . Queue Producer Definition Builder Ċ import Ġorg . gob lin framework . queue . producer . Queue Producer Tuple Ċ import Ġorg . gob lin framework . queue . producer . builder . Queue Producer Builder Manager Ċ Ċ @ Singleton Ċ class ĠQueue Producer Processor Ġprivate Ġconstructor () Ġ: ĠSpring Container Bean Post Processor Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval ĠINSTANCE Ġ= ĠQueue Producer Processor () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpost Process After Initialization ( bean : ĠAny ?, Ġbean Name : ĠString ?): ĠAny ? Ġ{ ĊĠĠĠ Ġreturn Ġbean ?. run Ġ{ Ġtry Queue Producer Injection ( bean ) Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtry Queue Producer Injection ( bean : ĠAny ): ĠAny Ġ{ ĊĠĠĠ ĠReflection Utils . all Fields In cluding An cestors ( bean . java Class , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠG ob lin Field ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġdefinitions Ġ= ĠQueue Producer Definition Builder . build ( it ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Collection Utils . isEmpty ( definitions )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproducer Tuples Ġ= Ġmutable ListOf < Queue Producer Tuple >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions . forEach Ġ{ Ġdef Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠQueue Producer Builder Manager . INSTANCE . builder ( def . location . queue System ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Queue Ġsystem Ġ${ def . location . queue System } Ġnot Ġinstalled ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproducer Ġ= Ġbuilder . producer ( def ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Ġ ĠIllegalArgumentException (" Producer Ġ${ def . location } Ġbuild Ġfailed ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproducer Tuple Ġ= ĠQueue Producer Tuple ( producer , Ġdef ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproducer Tuples . add ( producer Tuple ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . fieldType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQueue Message Producer :: class . java Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set ( bean , ĠDefault Queue Message Producer ( producer Tuples )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQueue Producer :: class . java Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set ( bean , ĠDefault Queue Producer ( producer Tuples )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Ġ ĠIllegalArgumentException (" Producer Ġ$ bean Ġmust Ġbe ĠQueue Message Producer Ġor ĠQueue Producer ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġbean ĊĠ Ġ} Ċ }