方法一:写个通用的常量类
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
public class SpringBeanUtlis extends SpringBeanAutowiringSupport {
/**
* 自动装配注解会让Spring通过类型匹配为beanFactory注入示例
*/
@Autowired
private BeanFactory beanFactory;
private SpringBeanUtlis() {
}
private static SpringBeanUtlis instance;
static {
// 静态块,初始化实例
instance = new SpringBeanUtlis();
}
/**
* 实例方法
* 使用的时候先通过getInstance方法获取实例
*
* @param beanId
* @return
*/
public Object getBeanById(String beanId) {
return beanFactory.getBean(beanId);
}
public static SpringBeanUtlis getInstance() {
return instance;
}
}
在其它类里调用方法:
public class I18NUtil {
public static String getMessage(String msgCode, String[] params) {
ReloadableResourceBundleMessageSource messageSource;
messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
SysParamService sysParamService = (SysParamService)SpringBeanUtlis.getInstance().getBeanById("sysParamService");
Locale locale = null;
String language = sysParamService.getLanguage();
if (StringUtils.isNotBlank(language)) {
String[] langStr = language.split("_");
locale = new Locale(langStr[0], langStr[1]);
}else{
locale = new Locale("zh", "CN");
}
return messageSource.getMessage(msgCode, params, locale);
}
}
这样In8NUtil常量类就可以通过:
SysParamService sysParamService = (SysParamService)SpringBeanUtlis.getInstance().getBeanById("sysParamService");来调用。
方法二:单独的常量类里调用,通过实现ApplicationContextAware接口
public class I18NUtil implements ApplicationContextAware {
private static ApplicationContext appContext;
@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
appContext = arg0;
}
public static Object getBean(String paramString){
return appContext.getBean(paramString);
}
public static String getMessage(String msgCode, String[] params) {
ReloadableResourceBundleMessageSource messageSource;
messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
SysParamService sysParamService = (SysParamService) getBean("sysParamService");
Locale locale = null;
String language = sysParamService.getLanguage();
if (StringUtils.isNotBlank(language)) {
String[] langStr = language.split("_");
locale = new Locale(langStr[0], langStr[1]);
}else{
locale = new Locale("zh", "CN");
}
return messageSource.getMessage(msgCode, params, locale);
}
}
注意:这种方式需要在applicationContext.xml文件写上以下配置
<bean id="i18NUtil" class="xxx.utils.I18NUtil"/>
配置完后常量类I18NUtil就可以通过
SysParamService sysParamService = (SysParamService) getBean("sysParamService");来调用。
结束,就这样希望大家可以通过这两种方式实现。