如果将Message source定义在applicationContext.xml中,在bean里面注入message source的时候总是会得到DelegationMessageSource,如果不想得到代理,比如使用了ReloadableResourceBundleMessageSource,想要在bean里面取到ReloadableResourceBundleMessageSource,应该讲定义移到springMVC-servlet.xml里面,这个可能是因为ApplicationContext本身有一个message source,参考参考链接文章,而以官方文档的说法,按照它的规则来总是取到的代理,如果定义在applicationContext.xml之外则不是用它默认的message source,也就不是代理了。
如果想要在bean 里面手动刷新message source,比如加入了新的语言文件,要重新加载,可以在定义ReloadableResourceBundleMessageSource的时候定义刷新间隔,也可以在bean里面需要的地方取到实例之后用clearCache方法。
参考:
https://stackoverflow.com/questions/728455/how-to-inject-spring-reloadableresourcebundlemessagesource
https://docs.spring.io/spring/docs/2.5.x/reference/beans.html#context-functionality-messagesource
https://stackoverflow.com/questions/3652090/difference-between-applicationcontext-xml-and-spring-servlet-xml-in-spring-frame