Spring Util常量类调用Service

方法一:写个通用的常量类

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");来调用。

结束,就这样希望大家可以通过这两种方式实现。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值