Skip to content
标签
工具
spring
字数
3152 字
阅读时间
18 分钟

AOPUtil

java

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.reflect.MethodSignature;

import java.lang.reflect.Method;

/**
 * AOP工具类
 *
 * @author Brack.zhu
 * @date 2021/1/20
 */
public class AopUtil {

    private AopUtil() {

    }

    /**
     * 获取AOP切入点的执行方法
     *
     * @param pjp AOP切入点
     * @return Method对象
     * @throws NoSuchMethodException
     */
    public static Method getMethod(ProceedingJoinPoint pjp) throws NoSuchMethodException {
        MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
        Method method = methodSignature.getMethod();
        return pjp.getTarget().getClass().getMethod(method.getName(), method.getParameterTypes());
    }


}

ApplicationUtil

java

/**
 * 应用服务工具类
 * @author Brack.zhu
 * @date 2020/9/21
 */
public class ApplicationUtil {

    private ApplicationUtil() {

    }

    /**
     * 获取当前服务实例ID<br/>
     *  实例id主要用于微服务中在单个服务中区分各实例。<br/>
     *   借鉴了Eureka 的Instance ID格式,实例id组成:ip:服务端口
     * @return
     */
    public static String getInstanceId(){
        String localIp=SpringContextUtil.getEnvProperty("spring.cloud.client.ip-address");
        String port=SpringContextUtil.getEnvProperty("server.port");
        return  localIp+":"+port;
    }

}

BeanRegistryUtil

java

import com.commnetsoft.commons.utils.StringUtils;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.util.ClassUtils;

import java.util.Map;
import java.util.Objects;

/**
 * Bean 注入注册工具类<br/>
 * {@link BeanDefinitionReaderUtils}
 *
 * @author Brack.zhu
 * @date 2020/7/13
 */
public class BeanRegistryUtil extends BeanDefinitionReaderUtils {

    private BeanRegistryUtil() {
    }

    /**
     * 注册bean到Spring容器中<br/>
     *
     * @param registry  注册器
     * @param beanClass 需要注册的bean 类对象
     * @return true:成功
     */
    public static boolean registryBeanDefinition(BeanDefinitionRegistry registry, Class<?> beanClass) {
        return registerBeanDefinition(registry, null, beanClass, null, new Object());
    }

    /**
     * 注册bean到Spring容器中<br/>
     *
     * @param registry        注册器
     * @param beanClass       需要注册的bean 类对象
     * @param constructorArgs 构造参数对象集合
     * @return true:成功
     */
    public static boolean registryBeanDefinition(BeanDefinitionRegistry registry, Class<?> beanClass, Object... constructorArgs) {
        return registerBeanDefinition(registry, null, beanClass, null, constructorArgs);
    }


    /**
     * 注册bean到Spring容器中<br/>
     *
     * @param registry        注册器
     * @param beanName        需要注册的bean名称
     * @param beanClass       需要注册的bean 类对象
     * @param constructorArgs 构造参数对象集合
     * @return true:成功
     */
    public static boolean registryBeanDefinition(BeanDefinitionRegistry registry, String beanName, Class<?> beanClass, Object... constructorArgs) {
        return registerBeanDefinition(registry, beanName, beanClass, null, constructorArgs);
    }

    /**
     * 注册bean到Spring容器中<br/>>
     *
     * @param registry            注册器
     * @param beanName            需要注册的bean名称
     * @param beanClass           需要注册的bean 类对象
     * @param extraPropertyValues 额外参数集合
     * @param constructorArgs     构造参数对象集合
     * @return true:成功
     */
    public static boolean registerBeanDefinition(BeanDefinitionRegistry registry, String beanName,
                                                 Class<?> beanClass, Map<String, Object> extraPropertyValues, Object... constructorArgs) {
        BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(beanClass);
        //构造参数
        if (constructorArgs != null) {
            for (Object obj : constructorArgs) {
                beanDefinitionBuilder.addConstructorArgValue(obj);
            }
        }
        AbstractBeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();

        if (StringUtils.isBlank(beanName)) {
            beanName = ClassUtils.getShortNameAsProperty(beanClass);
        }

        //是否存在
        if (registry.containsBeanDefinition(beanName)) {
            return false;
        }

        //注册条件判断
        String[] candidates = registry.getBeanDefinitionNames();
        for (String candidate : candidates) {
            BeanDefinition candidateBeanDefinition = registry.getBeanDefinition(candidate);
            if (Objects.equals(candidateBeanDefinition.getBeanClassName(), beanClass.getName())) {
                return false;
            }
        }

        //注册
        if (extraPropertyValues != null) {
            for (Map.Entry<String, Object> entry : extraPropertyValues.entrySet()) {
                beanDefinition.getPropertyValues().add(entry.getKey(), entry.getValue());
            }
        }

        registry.registerBeanDefinition(beanName, beanDefinition);
        return true;
    }

}

ClassScaner

java

import org.springframework.context.ApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternUtils;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.ClassMetadata;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.util.SystemPropertyUtils;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;

/**
 * 类扫描器
 * @author sunwen
 * @since 2019/5/17
 */
public class ClassScaner {

    public static <T> List<Class<? extends T>> scan(String basePackage, Class<T> clazz) throws Exception{
        ApplicationContext context = SpringContextUtil.getApplicationContext();
        if(context == null){
            throw new Exception("spring context has not inited");
        }
        return scan(context, basePackage, clazz);
    }

    /**
     * 扫描指定包下的clazz所有子类(排除抽象类和接口)
     * @author sunwen
     * @since 2020/8/19
     */
    public static <T> List<Class<? extends T>> scan(ResourceLoader resourceLoader, String basePackage, Class<T> clazz)
            throws IOException, ClassNotFoundException {
        List<Class<? extends T>> list = new ArrayList<>();
        ResourcePatternResolver resolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader);
        MetadataReaderFactory metaReader = new CachingMetadataReaderFactory(resourceLoader);
        String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
                + org.springframework.util.ClassUtils.convertClassNameToResourcePath(
                        SystemPropertyUtils.resolvePlaceholders(basePackage))
                + "/**/*.class";
        Resource[] resources = resolver.getResources(packageSearchPath);
        for (Resource r : resources) {
            MetadataReader reader = metaReader.getMetadataReader(r);
            ClassMetadata classMetadata = reader.getClassMetadata();
            if(classMetadata.isInterface() || classMetadata.isAbstract()){
                continue;
            }
            Class c = Class.forName(classMetadata.getClassName());
            if (clazz.isAssignableFrom(c) && !clazz.equals(c)){
                list.add(c);
            }
        }
        return list;
    }

    /**
     * 扫描指定包下的clazz注解的类(排除抽象类和接口)
     * @author sunwen
     * @since 2020/8/19
     */
    public static List<ClassMetadata> scanAnnotation(ResourceLoader resourceLoader, String basePackage, Class<? extends Annotation> clazz)
            throws IOException {
        List<ClassMetadata> list = new ArrayList<>();
        ResourcePatternResolver resolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader);
        MetadataReaderFactory metaReader = new CachingMetadataReaderFactory(resourceLoader);
        String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
                + org.springframework.util.ClassUtils.convertClassNameToResourcePath(
                SystemPropertyUtils.resolvePlaceholders(basePackage))
                + "/**/*.class";
        Resource[] resources = resolver.getResources(packageSearchPath);
        String annotationName = clazz.getName();
        for (Resource r : resources) {
            MetadataReader reader = metaReader.getMetadataReader(r);
            ClassMetadata classMetadata = reader.getClassMetadata();
            if(classMetadata.isInterface() || classMetadata.isAbstract()){
                continue;
            }
            AnnotationMetadata annotationMetadata = reader.getAnnotationMetadata();
            if(annotationMetadata.hasAnnotation(annotationName) || annotationMetadata.hasMetaAnnotation(annotationName)){
                list.add(classMetadata);
            }
        }
        return list;
    }
}

HttpPathUtil

java

import com.commnetsoft.commons.utils.StringUtils;
import org.springframework.util.AntPathMatcher;

/**
 * HTTP路径工具类
 *
 * @author Brack.zhu
 * @date 2020/11/4
 */
public class HttpPathUtil {

    private HttpPathUtil() {
    }

    private static AntPathMatcher antPathMatcher = new AntPathMatcher();

    /**
     * 根据路径匹配器的匹配策略匹配指定的路径
     *
     * @param path    路径
     * @param pattern 匹配策略
     * @return true:匹配成功
     */
    public static boolean match(String path,String pattern) {
        if (StringUtils.isNoneBlank(pattern, path)) {
            return antPathMatcher.match(pattern, path);
        }
        return false;
    }

    /**
     * 根据路径匹配器的匹配策略匹配指定的路径
     *
     * @param path     路径
     * @param patterns 匹配策略集合
     * @return true:匹配成功
     */
    public static boolean match(String path, String... patterns) {
        if (StringUtils.isNoneBlank(path) && null != patterns) {
            for (String pattern : patterns) {
                if (match(path, pattern)) {
                    return true;
                }
            }
        }
        return false;
    }

}

HttpRequestUtil

java

import com.commnetsoft.auth.model.HttpReqHead;
import com.commnetsoft.auth.model.HttpRouteHead;
import com.commnetsoft.auth.model.LoginEntity;
import com.commnetsoft.commons.utils.IpUtils;
import com.commnetsoft.data.constant.Entity;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

/**
 * HTTP 请求工具类
 * @author Brack.zhu
 * @date 2019/3/27
 */
public class HttpRequestUtil {

    private HttpRequestUtil() {}

    /**
     * 获取登录用户对应的用户模型id
     * @param request
     * @return
     */
    public static String getHeaderUserId(HttpServletRequest request) {
        LoginEntity entity = getHeaderEntity(request);
        if(entity != null && Entity.user.getValue().equals(entity.getNs())){
            return entity.getId();
        }
        return null;
    }

    /**
     * 获取请求头中的本地IDM的UUID,只有认证成功后的请求才有<br/>
     * @param request
     * @return
     */
    public static String getHeaderIdmuid(HttpServletRequest request) {
        return getHeader(request, HttpRouteHead.idmuid.getValue());
    }

    /**
     * 获取请求头中的开放平台servicecode,只有开放平台认证成功后的请求才有<br/>
     * @param request
     * @return
     */
    public static String getHeaderServiceCode(HttpServletRequest request) {
        return getHeader(request, HttpReqHead.servicecode.getValue());
    }

    /**
     * 获取当前登录实体
     * @author sunwen
     * @since 2020/7/8
     */
    public static LoginEntity getHeaderEntity(HttpServletRequest request) {
        String id = getHeader(request, HttpRouteHead.entityId.getValue());
        if(StringUtils.isEmpty(id)){
            return null;
        }
        String ns = getHeader(request, HttpRouteHead.entityNs.getValue());
        return new LoginEntity(ns, id);
    }

    /**
     * 获取请求头中的信息,内容转换成UTF-8<br/>
     *
     * @param request
     * @param key
     * @return
     */
    public static String getHeader(HttpServletRequest request,String key) {
        String keyVal = request.getHeader(key);
        if(keyVal != null) {
            try {
                keyVal = URLDecoder.decode(keyVal, StandardCharsets.UTF_8.name());
            } catch (UnsupportedEncodingException e) {
                //ignore
            }
        }
        return keyVal;
    }


    /**
     * 获取请求头中JWT信息,只有认证成功后的请求才有<br/>
     *
     * @param request
     * @return
     */
    public static String getHeaderJWT(HttpServletRequest request) {
        String token=request.getHeader(HttpReqHead.token.getValue());
        if(StringUtils.isBlank(token)){
            token=request.getHeader(HttpReqHead.token_old.getValue());
        }
        return token;
    }



    /**
     * 获取Request请求对象
     *
     * @return
     */
    public static HttpServletRequest getRequest() {
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = servletRequestAttributes.getRequest();
        return request;
    }

    /**
     * 判断当前设备是否为手机端
     * @param request
     * @return
     */
    public static boolean isMobileDevice(HttpServletRequest request){
        String userAgent = request.getHeader("User-Agent");
        boolean isMoblie = false;
        String[] mobileAgents = { "iphone", "android","ipad", "phone", "windows phone"};
        if (StringUtils.isNotEmpty(userAgent)) {
            userAgent = userAgent.toLowerCase();
            for (String mobileAgent : mobileAgents) {
                if (userAgent.contains(mobileAgent)) {
                    isMoblie = true;
                    break;
                }
            }
        }
        return isMoblie;
    }

    /**
     * 根据request获取ip地址
     * @param request
     * @return
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        //特殊处理ip可能有多个 取第一个
        if(StringUtils.contains(ip, ",")){
            ip = StringUtils.substringBefore(ip, ",");
        }
        //防止头信息被注入,对ip处理
        if(false == IpUtils.isIp(ip)){
            ip = "";
        }
        return ip;
    }


    /**
     * 获取指定Cookie对象
     * @param request
     * @param name
     * @return
     */
    public static Cookie getCookie(HttpServletRequest request,String name){
        Cookie[] cookies = request.getCookies();
        if(cookies == null || cookies.length <= 0) {
            return null;
        }
        for(int i = 0; i < cookies.length; i++){
            if(cookies[i].getName().equalsIgnoreCase(name)){
               return cookies[i];
            }
        }
        return null;
    }

    /**
     * 获取Cookie指定值
     * @param request
     * @param name
     * @return
     */
    public static String getCookieVal(HttpServletRequest request,String name){
        Cookie cookie=getCookie(request, name);
        if(null!=cookie){
            return cookie.getValue();
        }
        return null;
    }
}

HttpResponseUtil

java

import com.commnetsoft.commons.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * @ClassName HttpResponseUtil
 * @Author wuzm
 * @Date 2019/4/18 14:54
 * @Version 1.0
 */
public class HttpResponseUtil {
    private static final Logger log = LoggerFactory.getLogger(HttpResponseUtil.class);
    private HttpResponseUtil() {
    }

    public transient final static String DATATYPE_XML = "xml";
    public transient final static String DATATYPE_JSON = "json";

    /**
     * 输出xml格式到页面
     * @Param response
     * @Param content
     * @Param charSet
     * @Return void
     * @Author wuzm
     * Date 2019/4/18 16:47
     */
    public static void renderXML(HttpServletResponse response, String content, Charset charSet) {
        render(response,content, MediaType.TEXT_XML_VALUE,charSet);
    }

    /**
     * 输出json格式到页面
     * @Param response
     * @Param content
     * @Param charSet
     * @Return void
     * @Author wuzm
     * Date 2019/4/18 16:48
     */
    public static void renderJson(HttpServletResponse response, String content, Charset charSet) {
        render(response, content, MediaType.APPLICATION_JSON_VALUE,charSet);
    }

    /**
     * 输出txt格式到页面
     * @Param response
     * @Param content
     * @Param charSet
     * @Return void
     * @Author wuzm
     * Date 2019/4/18 16:48
     */
    public static void renderText(HttpServletResponse response, String content, Charset charSet) {
        render(response,content, MediaType.TEXT_PLAIN_VALUE,charSet);
    }

    /**
     * 输出html格式到页面
     * @Param response
     * @Param content
     * @Param charSet
     * @Return void
     * @Author wuzm
     * Date 2019/4/18 16:48
     */
    public static void renderHtml(HttpServletResponse response, String content, Charset charSet) {
        render(response,content,  MediaType.TEXT_HTML_VALUE,charSet);
    }

    /**
     * 输出js格式到页面
     * @Param response
     * @Param content
     * @Param charSet
     * @Return void
     * @Author wuzm
     * Date 2019/4/18 16:48
     */
    public static void renderJs(HttpServletResponse response, String content, Charset charSet) {
        render(response,content, "application/javascript", charSet);
    }

    /**
     * 用指定格式将内容写出到页面,默认使用UTF-8格式
     * @Param response
     * @Param content
     * @Param mimeType
     * @Return void
     * @Author wuzm
     * Date 2019/4/18 16:28
     */
    public static void render(HttpServletResponse response, String content, String mimeType, Charset charSet){
        try {
            if(null == charSet){
                charSet = StandardCharsets.UTF_8;
            }
            response.setContentType(mimeType+";charset="+charSet.displayName());
            response.setContentLength(content.getBytes(StandardCharsets.UTF_8).length);
            response.getWriter().write(content);
        } catch (IOException e) {
            log.error("response写入(content={},contentType={})异常:{}", content, mimeType, e);
        }
    }

    /**
     * 根据datatype的不同设置对应的返回格式,默认返回text格式
     * @param response
     * @param text
     * @param contentType
     */
    public static void contextType(HttpServletResponse response,String text,String contentType){
        if(StringUtils.equalsIgnoreCase(DATATYPE_XML, contentType)){
            renderXML(response,text,null);
        }else if(StringUtils.equalsIgnoreCase(DATATYPE_JSON, contentType)){
            renderJson(response,text,null);
        }else {
            renderText(response, text,null);
        }
    }

}

PagerUtils

java

import com.commnetsoft.commons.Pager;
import com.commnetsoft.commons.utils.BeanUtils;
import com.commnetsoft.commons.utils.BeanUtils.BeanCopier;

import java.util.List;

public class PagerUtils {

    /**
     * 通过Bean拷贝方式转换页面数据模型
     * @author sunwen
     * date 2019/4/26
     */
    public static <S, T> Pager<T> cast(Pager<S> pager, Class<T> clazz){
        return cast(pager, clazz, null);
    }

    /**
     * 通过Bean拷贝方式转换页面数据模型
     * @author sunwen
     * date 2019/4/26
     */
    public static <S, T> Pager<T> cast(Pager<S> pager, Class<T> clazz, BeanCopier<S, T> copier){
        List<T> tRows = null;
        List<S> rows = pager.getRows();
        if(rows != null){
            tRows = BeanUtils.batchCopyProperties(rows, clazz, copier);
        }
        Pager<T> tPager = (Pager<T>) pager;
        tPager.setRows(tRows);
        return tPager;
    }
}

SpElUtil

java

import com.commnetsoft.commons.utils.StringUtils;
import com.commnetsoft.core.CommonError;
import com.commnetsoft.exception.MicroRuntimeException;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanExpressionContext;
import org.springframework.beans.factory.config.BeanExpressionResolver;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

import java.lang.reflect.Method;

/**
 * Spel表达式工具类
 *
 * @author Brack.zhu
 * @date 2020/5/27
 */
public class SpElUtil {

    private static BeanExpressionResolver resolver;

    private static BeanExpressionContext expressionContext;

    private static SpelExpressionParser parser = new SpelExpressionParser();

    private static LocalVariableTableParameterNameDiscoverer methodDiscoverer = new LocalVariableTableParameterNameDiscoverer();


    private SpElUtil() {

    }

    /**
     * 解析Spel表达式---针对Spring代理Bean
     *
     * @param expressionStr SpEL表达式
     * @param <T>           返回类型结果
     * @return 表达式值
     * @throws MicroRuntimeException
     * @throws BeansException
     */
    public static <T> T evaluate(String expressionStr) throws MicroRuntimeException, BeansException {
        try {
            if (null == resolver) {
                ConfigurableBeanFactory beanFactory = (ConfigurableBeanFactory) SpringContextUtil.getApplicationContext().getAutowireCapableBeanFactory();
                resolver = beanFactory.getBeanExpressionResolver();
                expressionContext = new BeanExpressionContext(beanFactory, null);
            }
            Object rs = resolver.evaluate(expressionStr, expressionContext);
            return (T) rs;
        } catch (BeansException be) {
            throw be;
        } catch (ClassCastException cce) {
            throw new MicroRuntimeException(CommonError.illegal_operation.getCode(), "SpEl表达式解析返回结果转换失败:" + expressionStr, "", cce);
        } catch (Exception e) {
            throw new MicroRuntimeException(CommonError.internal_error.getCode(), "SpEl表达式解析失败:" + expressionStr, "", e);
        }
    }

    /**
     * 解析Spel表达式---针对Spring代理Method
     *
     * @param expressionStr     SpEL表达式
     * @param evaluationContext Spel上下文对象,{@link #methodBindParam(Method, Object[])}
     * @param <T>               返回类型结果
     * @return 表达式值
     * @throws MicroRuntimeException
     * @throws BeansException
     */
    public static <T> T evaluate(String expressionStr, EvaluationContext evaluationContext) throws MicroRuntimeException {
        try {
            if (null != evaluationContext && StringUtils.isNotBlank(expressionStr)) {
                Expression expression = parser.parseExpression(expressionStr);
                Object rs = expression.getValue(evaluationContext);
                return (T) rs;
            }
        } catch (Exception e) {
            throw new MicroRuntimeException(CommonError.internal_error.getCode(), "SpEl表达式解析失败:" + expressionStr, "", e);
        }
        return null;
    }


    /**
     * 将方法的参数名和参数值绑定,用于获取方法SPEL值--针对Spring代理Method
     *
     * @param method 方法,根据方法获取参数名
     * @param args   方法的参数值
     * @return SPEL上下文对象
     */
    public static EvaluationContext methodBindParam(Method method, Object[] args) {
        //获取方法的参数名
        String[] params = methodDiscoverer.getParameterNames(method);
        //将参数名与参数值对应起来
        EvaluationContext context = new StandardEvaluationContext();
        if (null != params) {
            for (int len = 0; len < params.length; len++) {
                context.setVariable(params[len], args[len]);
            }
        }
        return context;
    }

}

SpringContextUtil

java

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.util.ClassUtils;

import java.util.Map;

/**
 * Spring 上下文工具类<br/>
 * 注意:如果在ApplicationContext未准备好的情况下会获取失败的情况,需要考虑先后顺序
 *
 * @author Brack.zhu
 * @date 2019/4/4
 */

public class SpringContextUtil{

    /**
     * Spring应用上下文环境
     */
    private static ApplicationContext applicationContext;

    private  SpringContextUtil(){

    }

    /**
     * 外部设置由初始化时
     * @param context
     */
    public static void init(ApplicationContext context){
        applicationContext=context;
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Environment getEnvironment() {
        return applicationContext.getEnvironment();
    }

    /**
     * 获取对象
     * 例如: getBean("userService")//注意: 类名首字母一定要小写!
     */
    public static <T> T getBean(String beanId) throws BeansException {
        return (T) applicationContext.getBean(beanId);
    }

    /**
     * 获取对象
     */
    public static <T> T getBean(Class<T> clazz) throws BeansException {
        return applicationContext.getBean(clazz);
    }

    /**
     * 获取对象
     */
    public static <T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException {
        return applicationContext.getBeansOfType(type);
    }

    /**
     * 获取Spring容器对象名称集合
     * @return
     */
    public static String[] getBeanNames(){
        return applicationContext.getBeanDefinitionNames();
    }

    /**
     * 判断指定bean名称Bean容器是否包含
     *
     * @param beanName
     * @return
     */
    public static boolean containsBean(String beanName) {
        if (null == applicationContext) {
            //未准备好
            return false;
        }
        return applicationContext.containsBean(beanName);
    }

    /**
     * 判断指定Class默认名称Bean容器是否包含
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> boolean containsBean(Class<T> clazz) {
        String beanDefName = ClassUtils.getShortNameAsProperty(clazz);
        return containsBean(beanDefName);
    }

    /**
     * 获取Environment参数
     * @param key
     * @return
     */
    public static String getEnvProperty(String key) {
        return getEnvironment().getProperty(key);
    }


}

TemplateUtil

java

import jetbrick.template.JetEngine;
import jetbrick.template.JetTemplate;

import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

/**
 * 模板静态化工具类
 * @ClassName TemplateUtil
 * @Author wuzm
 * @Date 2019/8/16 15:43
 * @Version 1.0
 */
public class TemplateUtil {

    private static JetEngine engine = JetEngine.create();

    /**
     * 根据使用模板源代码生成静态字符串。
     * @Param source
     * @Param map
     * @Return java.lang.String
     * @Author wuzm
     * Date 2019/8/16 15:45
     */
    public static String buildTemplate(String source, Map<String,Object> map){
        JetTemplate template = engine.createTemplate(source);
        StringWriter sw = new StringWriter();
        template.render(map, sw);
        return sw.toString();
    }

    public static void main(String[] args) {
        String msg = "您好!${name}:\r\n  您的手机号${mobile}本月余额${balance}元。";
        Map<String, Object> map = new HashMap<>();
        map.put("name", "张三");
        map.put("mobile", "15777777777");
        map.put("balance", 100);
        String newmsg = buildTemplate(msg, map);
        System.out.println(newmsg);
    }

}