在@Controller中@Autowired自定义ReloadableResourceBundleMessageSource

时间:2014-03-19 10:45:38

标签: angularjs spring-mvc internationalization autowired

我已经构建了一个由客户端的angularJs和后端的spring MVC组成的应用程序。我的目的是将我的语言属性公开给客户端,以便我可以在我的JS文件中使用它们。为此,我使用了angular-translate.min.js库并按照说明操作: (https://gist.github.com/rvillars/6422287)。

基本上,我们的想法是创建一个从ReloadableResourceBundleMessageSource扩展的自定义类,并覆盖getAllProperties(Locale locale)方法。然后,在@controller中注入该自定义类,它将以Json格式的属性列表返回给客户端。 到目前为止,我的问题是我还没能在我的@controller中自动连接我的自定义类,扩展了ReloadableResourceBundleMessageSource。我的应用程序在部署阶段始终崩溃,并且#34;没有类型为CustomResourceBundleMessageSource&#34的合格bean。

我的环境: Spring MVC 3.2.3 Angular JS

请找到代码:

控制器类:

@Controller
@RequestMapping("/messageBundle")
public class SerializableMessageBundleController {

    @Autowired
    private CustomResourceBundleMessageSource messageSource;


    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public Properties list(@RequestParam String lang) {
        return messageSource.getAllProperties(new Locale(lang));
    }

自定义消息来源:

public class CustomResourceBundleMessageSource extends ReloadableResourceBundleMessageSource  {

     public Properties getAllProperties(Locale locale) {
            clearCacheIncludingAncestors();
            PropertiesHolder propertiesHolder = getMergedProperties(locale);
            Properties properties = propertiesHolder.getProperties();

            return properties;
        }

}
    }

的applicationContext.xml:

<bean id="messageSource" class="com.contgo.CustomResourceBundleMessageSource">  
         <qualifier value="messageSource"/>
        <property name="basename" value="LanguageResources"/>  
</bean>

我也尝试添加@qualifier(&#34; messageSource&#34;),但不起作用。 还可以尝试@Resource和@Inject,也不会工作。

有没有人设法做到这一点?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,最后得到了如下工作。 扩展ReloadableResourceBundleMessageSource的类是正确的。 您需要做的就是在applicationContext文件中正确配置它。

单独保留原始的ReloadableResourceBundleMessageSource配置:

<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource">  
        <property name="basename" value="LanguageResources"/>  
</bean>

然后使用&#39;父母&#39;添加以下内容。属性以引用原始配置:

<bean class="com.contgo.CustomResourceBundleMessageSource" id="myCustomMessageSource" parent="messageSource"/>

最后,在您的控制器中,您可以像这样自动装配它:

@Autowired
CustomResourceBundleMessageSource myCustomMessageSource;