我使用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>
我想根据控制器中的语言环境加载消息,我尝试了以下两种方式
@Autowired
@Qualifier("clientMessages")
ResourceBundleMessageSource clientMessages;
@Resource(name="systemMessages")
ResourceBundleMessageSource systemMessages;
修改
该应用程序是一个JAXRS应用程序,正在全局异常映射器中尝试注入。从评论我现在明白,这个类将由JAXRS容器而不是Spring(下面的代码)创建。如何让Spring知道这种注射必须有效?
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
}
}
但注射没有发生,我正在接受NPE。我如何实现这一目标?
答案 0 :(得分:2)
使用Spring并使用注释进行自动布线时,字段不能为null
。在启动应用程序时需要满足依赖关系。如果没有发生,那么可能会出现两件事中的一件错误
对于第一个选项,将<context:annotation-config />
添加到您的应用程序上下文中,或者如果您想要进行组件扫描,请添加<context:component-scan />
,后者已经暗示了注释处理。
对于第二个选项,您需要将bean设置为spring托管bean并使用它而不是自己创建新实例。