我正在使用 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
。应用程序启动时需要满足依赖关系。如果没有发生这种情况,则可能存在以下两处错误之一
- 您尚未启用注释处理
- 您没有使用 Spring 托管 Bean,而是自己创建实例
对于第一个选项,添加 <context:annotation-config />
添加到您的应用程序上下文,或者如果您想要进行组件扫描,请添加 <context:component-scan />
后者已经暗示了注释处理。
对于第二个选项,您需要使您的 bean 成为 Spring 托管 bean 并使用它,而不是自己创建新实例。
关于java - 如何加载两个ResourceBundle并分别注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315045/