Spring MessageSource是否支持多个类路径?

我正在使用Spring框架为基于Web的应用程序设计一个插件系统。插件是classpath上的jar。这样我就能获得诸如jsp之类的资源,请参见下文

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

Resource[] pages = resolver.getResources("classpath*:jsp/*jsp");

到现在为止还挺好。但是我对messageSource有问题。在我看来,ReloadableResourceBundleMessageSource#setBasename不通过“ classpath *:” 支持多个类路径。如果仅使用“ classpath:”,则仅从一个插件获取messageSource。

有谁知道如何从所有插件注册messageSources?是否存在这样的MessageSource实现?

回答:

这里的问题不是多个类路径或类加载器,而是代码将尝试为给定路径加载多少资源。

classpath*语法是一种Spring机制,它允许代码为给定路径加载多个资源。非常便利。但是,ResourceBundleMessageSource使用标准java.util.ResourceBundle来加载资源,这是一种更为简单,笨拙的机制,它将为给定路径加载第一个资源,而忽略其他所有内容。

我真的没有一个简单的解决方案。我认为你将不得不放弃ResourceBundleMessageSource并编写一个自定义实现MessageSource(很可能通过子类化AbstractMessageSource),该实现用于PathMatchingResourcePatternResolver定位各种资源并通过MessageSource接口公开它们。ResourceBundle不会有太大帮助。

以上是 Spring MessageSource是否支持多个类路径? 的全部内容, 来源链接: utcz.com/qa/430979.html

回到顶部