\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.","blog/modular-web-applications-based-on-spring",[248,249,250,251,252,253],"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…","9CCujFfUkmvCk9K2-lTvameRh4QQAhnYiCvpeGTJeT8",[257,260,263,266,269,272,275,278,281,284,287,290,293,296,299,302,305,308,311,314,317,320,322,325,328,331,334,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384,387,390,393,396,399,402,405,408,411,414,417,419,422,425,428,431,434,437,440,443,446,449,452,455,458,461,464,467,470,473,476,479,482,485,488,491,494,497,500,503,506,509,512,515,518,521,524,527,530,533,536,539,542,545,548,550,553,556,559,562,564,567,570,573,576,579,582,585,588,591,594,597,600,603,606,609,612,615,618,621,624,627,630,633,636,639,641,644,647,650,653,656,659,662,665,668,671,674],{"slug":258,"name":259},"abel","Jennifer Abel",{"slug":261,"name":262},"allmendinger","Otto Allmendinger",{"slug":264,"name":265},"antony","Ben Antony",{"slug":267,"name":268},"arrasz","Joachim Arrasz",{"slug":270,"name":271},"bauer","David Bauer",{"slug":273,"name":274},"bechtold","Janine Bechtold",{"slug":276,"name":277},"boersig","Jasmin Börsig",{"slug":279,"name":280},"buch","Fabian Buch",{"slug":282,"name":283},"buchloh","Aljona Buchloh",{"slug":285,"name":286},"burgard","Julia Burgard",{"slug":288,"name":289},"caspar-schwedes","Caspar Schwedes",{"slug":291,"name":292},"christina-schmitt","Christina Schmitt",{"slug":294,"name":295},"clausen","Michael Clausen",{"slug":297,"name":298},"contargo_poetzsch","Thomas Pötzsch",{"slug":300,"name":301},"damrath","Sebastian Damrath",{"slug":303,"name":304},"daniel","Markus Daniel",{"slug":306,"name":307},"dasch","Julia Dasch",{"slug":309,"name":310},"denman","Joffrey Denman",{"slug":312,"name":313},"dfuchs","Daniel Fuchs",{"slug":315,"name":316},"dobler","Max Dobler",{"slug":318,"name":319},"dobriakov","Vladimir Dobriakov",{"slug":321,"name":321},"dreiqbik",{"slug":323,"name":324},"dschaefer","Denise Schäfer",{"slug":326,"name":327},"dschneider","Dominik Schneider",{"slug":329,"name":330},"duerlich","Isabell Duerlich",{"slug":332,"name":333},"dutkowski","Bernd Dutkowski",{"slug":335,"name":335},"eifler",{"slug":337,"name":338},"essig","Tim Essig",{"slug":340,"name":341},"ferstl","Maximilian Ferstl",{"slug":343,"name":344},"fey","Prisca Fey",{"slug":346,"name":347},"frank","Leonard Frank",{"slug":349,"name":350},"franke","Arnold Franke",{"slug":352,"name":353},"frischer","Nicolette Rudmann",{"slug":355,"name":356},"fuchs","Petra Fuchs",{"slug":358,"name":359},"gari","Sarah Gari",{"slug":361,"name":362},"gast","Gast",{"slug":364,"name":365},"graf","Johannes Graf",{"slug":367,"name":368},"grammlich","Daniela Grammlich",{"slug":370,"name":371},"guthardt","Sabrina Guthardt",{"slug":373,"name":374},"haeussler","Johannes Häussler",{"slug":376,"name":377},"hammann","Daniel Hammann",{"slug":379,"name":380},"heetel","Julian Heetel",{"slug":382,"name":383},"heft","Florian Heft",{"slug":385,"name":386},"heib","Sebastian Heib",{"slug":388,"name":389},"heisler","Ida Heisler",{"slug":391,"name":392},"helm","Patrick Helm",{"slug":394,"name":395},"herbold","Michael Herbold",{"slug":397,"name":398},"hofmann","Peter Hofmann",{"slug":400,"name":401},"hopf","Florian Hopf",{"slug":403,"name":404},"jaud","Alina Jaud",{"slug":406,"name":407},"jayasinghe","Robin De Silva Jayasinghe",{"slug":409,"name":410},"jbuch","Jonathan Buch",{"slug":412,"name":413},"junghanss","Gitta Junghanß",{"slug":415,"name":416},"kadyietska","Khrystyna Kadyietska",{"slug":9,"name":418},"Marc Kannegiesser",{"slug":420,"name":421},"karoly","Robert Károly",{"slug":423,"name":424},"karrasz","Katja Arrasz-Schepanski",{"slug":426,"name":427},"kaufmann","Florian Kaufmann",{"slug":429,"name":430},"kesler","Mike Kesler",{"slug":432,"name":433},"kirchgaessner","Bettina Kirchgäßner",{"slug":435,"name":436},"klem","Yannic Klem",{"slug":438,"name":439},"klenk","Timo Klenk",{"slug":441,"name":442},"knell","Tobias Knell",{"slug":444,"name":445},"knoll","Anna-Lena Knoll",{"slug":447,"name":448},"knorre","Matthias Knorre",{"slug":450,"name":451},"koenig","Melanie König",{"slug":453,"name":454},"kraft","Thomas Kraft",{"slug":456,"name":457},"krupicka","Florian Krupicka",{"slug":459,"name":460},"kuehn","Christian Kühn",{"slug":462,"name":463},"lange","Christian Lange",{"slug":465,"name":466},"larrasz","Luca Arrasz",{"slug":468,"name":469},"leist","Sascha Leist",{"slug":471,"name":472},"lihs","Michael Lihs",{"slug":474,"name":475},"linsin","David Linsin",{"slug":477,"name":478},"maniyar","Christian Maniyar",{"slug":480,"name":481},"martin","Björnie",{"slug":483,"name":484},"martin-koch","Martin Koch",{"slug":486,"name":487},"matt","Tobias Matt",{"slug":489,"name":490},"mennerich","Christian Mennerich",{"slug":492,"name":493},"menz","Alexander Menz",{"slug":495,"name":496},"meseck","Frederick Meseck",{"slug":498,"name":499},"messner","Oliver Messner",{"slug":501,"name":502},"michael-ploed","Michael Plöd",{"slug":504,"name":505},"mies","Marius Mies",{"slug":507,"name":508},"mihai","Alina Mihai",{"slug":510,"name":511},"moeller","Jörg Möller",{"slug":513,"name":514},"mohr","Rebecca Mohr",{"slug":516,"name":517},"moretti","David Moretti",{"slug":519,"name":520},"mueller","Sven Müller",{"slug":522,"name":523},"muessig","Alexander Müssig",{"slug":525,"name":526},"neupokoev","Grigory Neupokoev",{"slug":528,"name":529},"nussbaecher","Carmen Nussbächer",{"slug":531,"name":532},"ochs","Pascal Ochs",{"slug":534,"name":535},"oelhoff","Jan Oelhoff",{"slug":537,"name":538},"oengel","Yasin Öngel",{"slug":540,"name":541},"oezsoy","Enis Özsoy",{"slug":543,"name":544},"posch","Maya Posch",{"slug":546,"name":547},"ralfmueller","Ralf Müller",{"slug":549,"name":549},"redakteur",{"slug":551,"name":552},"reich","Michael Reich",{"slug":554,"name":555},"reinhard","Karl-Ludwig Reinhard",{"slug":557,"name":558},"rmueller","Rebecca Müller",{"slug":560,"name":561},"rosum","Jan Rosum",{"slug":563,"name":563},"rueckert",{"slug":565,"name":566},"ruessel","Sascha Rüssel",{"slug":568,"name":569},"sauter","Moritz Sauter",{"slug":571,"name":572},"schaefer","Julian Schäfer",{"slug":574,"name":575},"scherer","Petra Scherer",{"slug":577,"name":578},"schlicht","Anne Schlicht",{"slug":580,"name":581},"schmidt","Jürgen Schmidt",{"slug":583,"name":584},"schneider","Tobias Schneider",{"slug":586,"name":587},"seber","Benjamin Seber",{"slug":589,"name":590},"sommer","Marc Sommer",{"slug":592,"name":593},"speaker-fels","Jakob Fels",{"slug":595,"name":596},"speaker-gierke","Oliver Gierke",{"slug":598,"name":599},"speaker-krupa","Malte Krupa",{"slug":601,"name":602},"speaker-mader","Jochen Mader",{"slug":604,"name":605},"speaker-meusel","Tim Meusel",{"slug":607,"name":608},"speaker-milke","Oliver Milke",{"slug":610,"name":611},"speaker-paluch","Mark Paluch",{"slug":613,"name":614},"speaker-schad","Jörg Schad",{"slug":616,"name":617},"speaker-schalanda","Jochen Schalanda",{"slug":619,"name":620},"speaker-schauder","Jens Schauder",{"slug":622,"name":623},"speaker-unterstein","Johannes Unterstein",{"slug":625,"name":626},"speaker-wolff","Eberhard Wolff",{"slug":628,"name":629},"speaker-zoerner","Stefan Zörner",{"slug":631,"name":632},"stefan-belger","Stefan Belger",{"slug":634,"name":635},"steinegger","Roland Steinegger",{"slug":637,"name":638},"stern","sternchen synyx",{"slug":640,"name":640},"synyx",{"slug":642,"name":643},"szulc","Mateusz Szulc",{"slug":645,"name":646},"tamara","Tamara Tunczinger",{"slug":648,"name":649},"theuer","Tobias Theuer",{"slug":651,"name":652},"thieme","Sandra Thieme",{"slug":654,"name":655},"thies-clasen","Marudor",{"slug":657,"name":658},"toernstroem","Olle Törnström",{"slug":660,"name":661},"ullinger","Max Ullinger",{"slug":663,"name":664},"ulrich","Stephan Ulrich",{"slug":666,"name":667},"wagner","Stefan Wagner",{"slug":669,"name":670},"weigel","Andreas Weigel",{"slug":672,"name":673},"werner","Fabian Werner",{"slug":675,"name":676},"wolke","Sören Wolke",["Reactive",678],{"$scookieConsent":679,"$ssite-config":681},{"functional":680,"analytics":680},false,{"_priority":682,"env":686,"name":687,"url":688},{"name":683,"env":684,"url":685},-10,-15,0,"production","nuxt-app","https://synyx.de",["Set"],["ShallowReactive",691],{"category-framework":-1,"authors":-1},"/blog/tags/framework"]