GVKun编程网logo

Spring MessageSource是否支持多个类路径?(@spring.message)

1

如果您对SpringMessageSource是否支持多个类路径?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于SpringMessageSource是否支持多个类路径?的

如果您对Spring MessageSource是否支持多个类路径?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Spring MessageSource是否支持多个类路径?的详细内容,我们还将为您解答@spring.message的相关问题,并且为您提供关于Css 不适用于 ReloadableResourceBundleMessageSource、How to resolve warning message Access restriction -The type Resource is not accessible、java – 在Spring MVC框架中不使用MessageSourceAware访问MessageSource的方法、java-假设Spring MessageSource实现是线程安全的吗?的有价值信息。

本文目录一览:

Spring MessageSource是否支持多个类路径?(@spring.message)

Spring MessageSource是否支持多个类路径?(@spring.message)

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

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

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

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

答案1

小编典典

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

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

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

答案2

小编典典

通过@ seralex-vi解决方案,基本名称/ WEB-INF / messages无法正常运行。

我覆盖了ReloadableResourceBundleMessageSource类上的方法refreshProperties,该方法同时执行两种类型的基名(classpath *:和/ WEB-INF /)

public class SmReloadableResourceBundleMessageSource extends ReloadableResourceBundleMessageSource {private static final String PROPERTIES_SUFFIX = ".properties";private PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();@Overrideprotected PropertiesHolder refreshProperties(String filename, PropertiesHolder propHolder) {    if (filename.startsWith(PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX)) {        return refreshClassPathProperties(filename, propHolder);    } else {        return super.refreshProperties(filename, propHolder);    }}private PropertiesHolder refreshClassPathProperties(String filename, PropertiesHolder propHolder) {    Properties properties = new Properties();    long lastModified = -1;    try {      Resource[] resources = resolver.getResources(filename + PROPERTIES_SUFFIX);      for (Resource resource : resources) {        String sourcePath = resource.getURI().toString().replace(PROPERTIES_SUFFIX, "");        PropertiesHolder holder = super.refreshProperties(sourcePath, propHolder);        properties.putAll(holder.getProperties());        if (lastModified < resource.lastModified())          lastModified = resource.lastModified();      }    } catch (IOException ignored) {     }    return new PropertiesHolder(properties, lastModified);}

在spring-context.xml上,你必须具有classpath *:前缀

<bean id="messageSource">    <property name="basenames">        <list>            <value>/WEB-INF/i18n/enums</value>            <value>/WEB-INF/i18n/messages</value>            <value>classpath*:/META-INF/messages-common</value>            <value>classpath*:/META-INF/enums</value>        </list>    </property></bean>

Css 不适用于 ReloadableResourceBundleMessageSource

Css 不适用于 ReloadableResourceBundleMessageSource

如何解决Css 不适用于 ReloadableResourceBundleMessageSource?

我正在使用 Spring Framework 和 Thymeleaf。我把我的项目validation.properties。当我使用与validation.properties 连接的方法时,我总是遇到错误,所以我找到了解决它的方法。

就是这个

@Configuration
@EnableWebMvc
public class WebConfiguration implements WebMvcConfigurer {

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    // Load file: validation.properties
    messageSource.setBasename("classpath:validation");
    messageSource.setdefaultencoding("UTF-8");
    return messageSource;
}

但现在我的 css 文件不适用于该解决方案。我该如何解决?我的css路径是/resources/static/main.css。

Validation.properties 的路径为 /resources/validation.properties。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

How to resolve warning message Access restriction -The type Resource is not accessible

How to resolve warning message Access restriction -The type Resource is not accessible

Created by Wang, Jerry, last modified on Jul 08, 2016

clipboard1
clipboard2
clipboard3
clipboard4

本文同步分享在 博客“汪子熙”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

java – 在Spring MVC框架中不使用MessageSourceAware访问MessageSource的方法

java – 在Spring MVC框架中不使用MessageSourceAware访问MessageSource的方法

我有几个servlet旨在保存自己的消息源,但是有一个静态函数使用此消息源作为备份,并且在正常情况下使用全局BDB来检索本地化文本.

我想知道是否有一种方法可以检索调用此全局静态函数的servlet上下文的MessageSource?

我不能在所有servlet中使用MessageSourceAware.我查看了Spring文档,发现了MessageSourceAware和@autowired属性.我不能使用注释,因为我使用的是Spring 2.0.

任何帮助赞赏.

谢谢,
PARTH

最佳答案
如果您的MessageSource是在WebApplicationContext中定义的,则可以通过以下方式检索它:

WebApplicationContext webAppContext = RequestContextUtils.getWebApplicationContext(request);
MessageSource messageSource = webAppContext.getBean("messageSource");

java-假设Spring MessageSource实现是线程安全的吗?

java-假设Spring MessageSource实现是线程安全的吗?

是否可以安全地假设org.springframework.context.MessageSource接口的所有实现在初始化后都是线程安全的?

我希望它是安全的,但是现在我正在查看Spring源代码,并且有org.springframework.context.support.ReloadableResourceBundleMessageSource会不时地重新加载属性,并且文档中没有任何关于线程安全的内容. ..

编辑:看来ReloadableResourceBundleMessageSource确实确实在需要的地方被同步了……但是我的原始问题仍然存在.

最佳答案
只是看了一下源代码-任何地方都没有同步的关键字,并且没有可写状态.不,它不是线程安全的.

这么说,从您的应用程序的角度来看,脏读有什么危害?标签或消息值错误?您可能不必担心缺少值,因为如果将JSP或类修改为使用新消息,则必须重新部署整个应用程序.我认为您在这里很安全.

关于Spring MessageSource是否支持多个类路径?@spring.message的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Css 不适用于 ReloadableResourceBundleMessageSource、How to resolve warning message Access restriction -The type Resource is not accessible、java – 在Spring MVC框架中不使用MessageSourceAware访问MessageSource的方法、java-假设Spring MessageSource实现是线程安全的吗?等相关内容,可以在本站寻找。

本文标签: