\n \u003C/property>\n \u003Cproperty name=\"useCodeAsDefaultMessage\" value=\"true\" />\n\u003C/bean>\n","plaintext","",[45,116,117,125,131,137,143,149],{"__ignoreMap":114},[118,119,122],"span",{"class":120,"line":121},"line",1,[118,123,124],{},"\u003Cbean id=\"messageSource\">\n",[118,126,128],{"class":120,"line":127},2,[118,129,130],{}," \u003Cproperty name=\"sources\">\n",[118,132,134],{"class":120,"line":133},3,[118,135,136],{}," \u003Cplugin:list class=\"org.synyx.minos.message.ModuleMessageSource\"/>\n",[118,138,140],{"class":120,"line":139},4,[118,141,142],{}," \u003C/property>\n",[118,144,146],{"class":120,"line":145},5,[118,147,148],{}," \u003Cproperty name=\"useCodeAsDefaultMessage\" value=\"true\" />\n",[118,150,152],{"class":120,"line":151},6,[118,153,154],{},"\u003C/bean>\n",[18,156,157,158,161,162,165,166,168,169,171],{},"So this registers our",[45,159,160],{},"DispatchingMessageSource"," that gets injected into all beans within the context, implementing\n",[45,163,164],{},"ModuleMessageSource"," by Hera. This pretty much does the trick. The reason that we use",[45,167,164],{}," instead of\nSprings built-in",[45,170,70],{},"-interface is on the one hand so that we can do some performance-tweaks and on the\nother hand so that we dont get any “unwanted” implementations, which get to the context somehow.",[18,173,174,175,177],{},"With some simple dispatching logic within",[45,176,160],{}," we found a powerful way to conquer the insufficiency\nof Spring, in conjunction with our modular system.",[109,179,181],{"className":111,"code":180,"language":113,"meta":114,"style":114},"List candidates = sources.getPluginsFor(getPrefixFromCode(code));\nfor (MessageSourcePlugin source : candidates) {\n MessageFormat format = resolveMessageWithSource(source, code, locale);\n if (null != format) {\n return format;\n }\n}\n",[45,182,183,188,193,198,203,208,213],{"__ignoreMap":114},[118,184,185],{"class":120,"line":121},[118,186,187],{},"List candidates = sources.getPluginsFor(getPrefixFromCode(code));\n",[118,189,190],{"class":120,"line":127},[118,191,192],{},"for (MessageSourcePlugin source : candidates) {\n",[118,194,195],{"class":120,"line":133},[118,196,197],{}," MessageFormat format = resolveMessageWithSource(source, code, locale);\n",[118,199,200],{"class":120,"line":139},[118,201,202],{}," if (null != format) {\n",[118,204,205],{"class":120,"line":145},[118,206,207],{}," return format;\n",[118,209,210],{"class":120,"line":151},[118,211,212],{}," }\n",[118,214,216],{"class":120,"line":215},7,[118,217,218],{},"}\n",[18,220,221,222,225,226,229],{},"By the way, we use this mechanism a lot when it comes to easily extending functionality of the framework-core including\n",[45,223,224],{},"HandlerInterceptor",",",[45,227,228],{},"PropertyEditorRegistrar"," and our Modules itself.",[231,232,233],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":114,"searchDepth":127,"depth":127,"links":235},[],[237],"developer-blog","2010-04-23T11:45:49","Many of the Web-Applications we develop for our customers are based upon our small Framework on top\\nof Spring / Spring MVC. This framework basically\\nbrings often used components ready-to-use (or ready to customize) and – of course – makes things even simpler than\\nSpring already does.","md",{},true,"/blog/modular-web-applications-based-on-spring",{"title":7,"description":245},"Many of the Web-Applications we develop for our customers are based upon our small Framework on top\nof Spring / Spring MVC. This framework basically\nbrings often used components ready-to-use (or ready to customize) and – of course – makes things even simpler than\nSpring already does.",{"loc":243},"blog/modular-web-applications-based-on-spring",[249,250,251,252,253,254],"architecture","framework","internationalization","modular","plugin","spring","Many of the Web-Applications we develop for our customers are based upon our small Framework on top of Spring / Spring MVC. This framework basically brings often used components ready-to-use…","5W0G-SGPAZoCYIgYoymGLTgczHKhlKMT_hbPe_Lgn7s",[258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,323,326,329,332,335,337,340,343,346,349,352,355,358,361,364,367,370,373,376,379,382,385,388,391,394,397,400,403,406,409,412,415,418,420,423,426,429,432,435,438,441,444,447,450,453,456,459,462,465,468,471,474,477,480,483,486,489,492,495,498,501,504,507,510,513,516,519,522,525,528,531,534,537,540,543,546,549,551,554,557,560,563,565,568,571,574,577,580,583,586,589,592,595,598,601,604,607,610,613,616,619,622,625,628,631,634,637,640,642,645,648,651,654,657,660,663,666,669,672,675],{"slug":259,"name":260},"abel","Jennifer Abel",{"slug":262,"name":263},"allmendinger","Otto Allmendinger",{"slug":265,"name":266},"antony","Ben Antony",{"slug":268,"name":269},"arrasz","Joachim Arrasz",{"slug":271,"name":272},"bauer","David Bauer",{"slug":274,"name":275},"bechtold","Janine Bechtold",{"slug":277,"name":278},"boersig","Jasmin Börsig",{"slug":280,"name":281},"buch","Fabian Buch",{"slug":283,"name":284},"buchloh","Aljona Buchloh",{"slug":286,"name":287},"burgard","Julia Burgard",{"slug":289,"name":290},"caspar-schwedes","Caspar Schwedes",{"slug":292,"name":293},"christina-schmitt","Christina Schmitt",{"slug":295,"name":296},"clausen","Michael Clausen",{"slug":298,"name":299},"contargo_poetzsch","Thomas Pötzsch",{"slug":301,"name":302},"damrath","Sebastian Damrath",{"slug":304,"name":305},"daniel","Markus Daniel",{"slug":307,"name":308},"dasch","Julia Dasch",{"slug":310,"name":311},"denman","Joffrey Denman",{"slug":313,"name":314},"dfuchs","Daniel Fuchs",{"slug":316,"name":317},"dobler","Max Dobler",{"slug":319,"name":320},"dobriakov","Vladimir Dobriakov",{"slug":322,"name":322},"dreiqbik",{"slug":324,"name":325},"dschaefer","Denise Schäfer",{"slug":327,"name":328},"dschneider","Dominik Schneider",{"slug":330,"name":331},"duerlich","Isabell Duerlich",{"slug":333,"name":334},"dutkowski","Bernd Dutkowski",{"slug":336,"name":336},"eifler",{"slug":338,"name":339},"essig","Tim Essig",{"slug":341,"name":342},"ferstl","Maximilian Ferstl",{"slug":344,"name":345},"fey","Prisca Fey",{"slug":347,"name":348},"frank","Leonard Frank",{"slug":350,"name":351},"franke","Arnold Franke",{"slug":353,"name":354},"frischer","Nicolette Rudmann",{"slug":356,"name":357},"fuchs","Petra Fuchs",{"slug":359,"name":360},"gari","Sarah Gari",{"slug":362,"name":363},"gast","Gast",{"slug":365,"name":366},"graf","Johannes Graf",{"slug":368,"name":369},"grammlich","Daniela Grammlich",{"slug":371,"name":372},"guthardt","Sabrina Guthardt",{"slug":374,"name":375},"haeussler","Johannes Häussler",{"slug":377,"name":378},"hammann","Daniel Hammann",{"slug":380,"name":381},"heetel","Julian Heetel",{"slug":383,"name":384},"heft","Florian Heft",{"slug":386,"name":387},"heib","Sebastian Heib",{"slug":389,"name":390},"heisler","Ida Heisler",{"slug":392,"name":393},"helm","Patrick Helm",{"slug":395,"name":396},"herbold","Michael Herbold",{"slug":398,"name":399},"hofmann","Peter Hofmann",{"slug":401,"name":402},"hopf","Florian Hopf",{"slug":404,"name":405},"jaud","Alina Jaud",{"slug":407,"name":408},"jayasinghe","Robin De Silva Jayasinghe",{"slug":410,"name":411},"jbuch","Jonathan Buch",{"slug":413,"name":414},"junghanss","Gitta Junghanß",{"slug":416,"name":417},"kadyietska","Khrystyna Kadyietska",{"slug":9,"name":419},"Marc Kannegiesser",{"slug":421,"name":422},"karoly","Robert Károly",{"slug":424,"name":425},"karrasz","Katja Arrasz-Schepanski",{"slug":427,"name":428},"kaufmann","Florian Kaufmann",{"slug":430,"name":431},"kesler","Mike Kesler",{"slug":433,"name":434},"kirchgaessner","Bettina Kirchgäßner",{"slug":436,"name":437},"klem","Yannic Klem",{"slug":439,"name":440},"klenk","Timo Klenk",{"slug":442,"name":443},"knell","Tobias Knell",{"slug":445,"name":446},"knoll","Anna-Lena Knoll",{"slug":448,"name":449},"knorre","Matthias Knorre",{"slug":451,"name":452},"koenig","Melanie König",{"slug":454,"name":455},"kraft","Thomas Kraft",{"slug":457,"name":458},"krupicka","Florian Krupicka",{"slug":460,"name":461},"kuehn","Christian Kühn",{"slug":463,"name":464},"lange","Christian Lange",{"slug":466,"name":467},"larrasz","Luca Arrasz",{"slug":469,"name":470},"leist","Sascha Leist",{"slug":472,"name":473},"lihs","Michael Lihs",{"slug":475,"name":476},"linsin","David Linsin",{"slug":478,"name":479},"maniyar","Christian Maniyar",{"slug":481,"name":482},"martin","Björnie",{"slug":484,"name":485},"martin-koch","Martin Koch",{"slug":487,"name":488},"matt","Tobias Matt",{"slug":490,"name":491},"mennerich","Christian Mennerich",{"slug":493,"name":494},"menz","Alexander Menz",{"slug":496,"name":497},"meseck","Frederick Meseck",{"slug":499,"name":500},"messner","Oliver Messner",{"slug":502,"name":503},"michael-ploed","Michael Plöd",{"slug":505,"name":506},"mies","Marius Mies",{"slug":508,"name":509},"mihai","Alina Mihai",{"slug":511,"name":512},"moeller","Jörg Möller",{"slug":514,"name":515},"mohr","Rebecca Mohr",{"slug":517,"name":518},"moretti","David Moretti",{"slug":520,"name":521},"mueller","Sven Müller",{"slug":523,"name":524},"muessig","Alexander Müssig",{"slug":526,"name":527},"neupokoev","Grigory Neupokoev",{"slug":529,"name":530},"nussbaecher","Carmen Nussbächer",{"slug":532,"name":533},"ochs","Pascal Ochs",{"slug":535,"name":536},"oelhoff","Jan Oelhoff",{"slug":538,"name":539},"oengel","Yasin Öngel",{"slug":541,"name":542},"oezsoy","Enis Özsoy",{"slug":544,"name":545},"posch","Maya Posch",{"slug":547,"name":548},"ralfmueller","Ralf Müller",{"slug":550,"name":550},"redakteur",{"slug":552,"name":553},"reich","Michael Reich",{"slug":555,"name":556},"reinhard","Karl-Ludwig Reinhard",{"slug":558,"name":559},"rmueller","Rebecca Müller",{"slug":561,"name":562},"rosum","Jan Rosum",{"slug":564,"name":564},"rueckert",{"slug":566,"name":567},"ruessel","Sascha Rüssel",{"slug":569,"name":570},"sauter","Moritz Sauter",{"slug":572,"name":573},"schaefer","Julian Schäfer",{"slug":575,"name":576},"scherer","Petra Scherer",{"slug":578,"name":579},"schlicht","Anne Schlicht",{"slug":581,"name":582},"schmidt","Jürgen Schmidt",{"slug":584,"name":585},"schneider","Tobias Schneider",{"slug":587,"name":588},"seber","Benjamin Seber",{"slug":590,"name":591},"sommer","Marc Sommer",{"slug":593,"name":594},"speaker-fels","Jakob Fels",{"slug":596,"name":597},"speaker-gierke","Oliver Gierke",{"slug":599,"name":600},"speaker-krupa","Malte Krupa",{"slug":602,"name":603},"speaker-mader","Jochen Mader",{"slug":605,"name":606},"speaker-meusel","Tim Meusel",{"slug":608,"name":609},"speaker-milke","Oliver Milke",{"slug":611,"name":612},"speaker-paluch","Mark Paluch",{"slug":614,"name":615},"speaker-schad","Jörg Schad",{"slug":617,"name":618},"speaker-schalanda","Jochen Schalanda",{"slug":620,"name":621},"speaker-schauder","Jens Schauder",{"slug":623,"name":624},"speaker-unterstein","Johannes Unterstein",{"slug":626,"name":627},"speaker-wolff","Eberhard Wolff",{"slug":629,"name":630},"speaker-zoerner","Stefan Zörner",{"slug":632,"name":633},"stefan-belger","Stefan Belger",{"slug":635,"name":636},"steinegger","Roland Steinegger",{"slug":638,"name":639},"stern","sternchen synyx",{"slug":641,"name":641},"synyx",{"slug":643,"name":644},"szulc","Mateusz Szulc",{"slug":646,"name":647},"tamara","Tamara Tunczinger",{"slug":649,"name":650},"theuer","Tobias Theuer",{"slug":652,"name":653},"thieme","Sandra Thieme",{"slug":655,"name":656},"thies-clasen","Marudor",{"slug":658,"name":659},"toernstroem","Olle Törnström",{"slug":661,"name":662},"ullinger","Max Ullinger",{"slug":664,"name":665},"ulrich","Stephan Ulrich",{"slug":667,"name":668},"wagner","Stefan Wagner",{"slug":670,"name":671},"weigel","Andreas Weigel",{"slug":673,"name":674},"werner","Fabian Werner",{"slug":676,"name":677},"wolke","Sören Wolke",["Reactive",679],{"$scookieConsent":680,"$ssite-config":682},{"functional":681,"analytics":681},false,{"_priority":683,"env":687,"name":688,"url":689},{"name":684,"env":685,"url":686},-10,-15,0,"production","nuxt-app","https://synyx.de",["Set"],["ShallowReactive",692],{"category-framework":-1,"authors":-1},"/blog/tags/framework"]