gpt4 book ai didi

java - 如何加载两个ResourceBundle并分别注入(inject)

转载 作者:行者123 更新时间:2023-12-02 04:05:33 28 4
gpt4 key购买 nike

我正在使用 Spring 将本地化资源包加载到我的应用程序中。这是我所做的。

<bean id="systemMessages" class="o.s.c.s.ResourceBundleMessageSource">
<property name="basename" value="locale/system">
</bean>

<bean id="clientMessages" class="o.s.c.s.ResourceBundleMessageSource">
<property name="basename" value="locale/client">
</bean>

我想根据 Controller 中的区域设置加载消息,我尝试了下面的两种方法

@Autowired
@Qualifier("clientMessages")
ResourceBundleMessageSource clientMessages;

@Resource(name="systemMessages")
ResourceBundleMessageSource systemMessages;

编辑

该应用程序是一个 JAXRS 应用程序,并且正在全局异常映射器中尝试注入(inject)。从评论中我现在了解到这个类是由 JAXRS 容器而不是 Spring 创建的(下面的代码)。如何让Spring知道这次注入(inject)一定起作用?

import javax.ws.rs.WebApplicationException;

//other imports

public class GlobalWebApplicationException extends WebApplicationException{
private String systemMessage;
private String clientMessage;

//Autowire the multiple resourcebundles

public GlobalWebApplicationException (String key, Locale locale) {
// this is where I want to use the injected object fetch the property
}

public doSomething(){
// Business Logic
}

}

但是注入(inject)没有发生,我得到了 NPE。我如何实现这一目标?

最佳答案

当使用 Spring 并让它使用注释进行 Autowiring 时,字段不能是 null 。应用程序启动时需要满足依赖关系。如果没有发生这种情况,则可能存在以下两处错误之一

  1. 您尚未启用注释处理
  2. 您没有使用 Spring 托管 Bean,而是自己创建实例

对于第一个选项,添加 <context:annotation-config />添加到您的应用程序上下文,或者如果您想要进行组件扫描,请添加 <context:component-scan />后者已经暗示了注释处理。

对于第二个选项,您需要使您的 bean 成为 Spring 托管 bean 并使用它,而不是自己创建新实例。

关于java - 如何加载两个ResourceBundle并分别注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315045/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com