静态工具类方法调用Mapper

代码示例

这是我所编写的返回信息国际化工具类,没有看明白怎么在静态工具类方法调用Mapper往下看详解

import com.rongyi.common.mapper.LangMapper;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * 获取国际化信息
 */
@Component
public class LanguageUtils {
    @Resource
    private LangMapper langMapper;

    private static LanguageUtils languageUtils;

    @PostConstruct
    public void init(){
        languageUtils = this;
        languageUtils.langMapper = this.langMapper;
    }

    /**
     * 全局中获取请求头中信息
     * @return
     */
    public static String getLanguage() {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (null != requestAttributes) {
            HttpServletRequest request = requestAttributes.getRequest();
            String lang = request.getHeader("lang");
            return lang;
        }
        return "zh";
    }

    public static String getMessage(String msg){
        try {
            msg = languageUtils.langMapper.getInternationalMsg(getLanguage(), msg);
            return msg;
        } catch (Exception e) {
            // 基本就只有空指针异常
            return null;
        }
    }
}

技术理解

@Component 注解:类交给Spring 管理

// 注入mapper
@Resource
private LangMapper langMapper;
// 静态化类——实际上相当于实例化
private static LanguageUtils languageUtils;

// 这个就是关键点了,用静态化的本类对象去保存本类(this)的信息,这里需要的就是 languageUtils.langMapper
@PostConstruct
public void init(){
languageUtils = this;
languageUtils.langMapper = this.langMapper;
}

调用mapper方法——通过静态实例化的工具类languageUtils调用注入的接口langMapper
自由调用mapper中的方法,我这里是获取国际化后的返回信息
languageUtils.langMapper.getInternationalMsg(getLanguage(), msg);

参考文档

静态工具类注入mapper方法

你可能感兴趣的:(Java,#,代码分享,Maven,spring,java,mybatis)