SpringBoot——Spring容器工具类SpringContextUtils.java

SpringBoot——容器工具类SpringContextUtils.java

更多精彩内容,欢迎关注我的微信公众号:编程Thinker (code_thinker_666)

背景

​ 在SpringBoot项目中,通常会遇到工具类中调用Spring容器中的Bean,由于工具类通常是静态方法,我们通常不使用自动注入,这时,就需要一种不自动注入便可以从Spring容器中拿出Bean的工具了,这里我把我日常用的工具类SpringContextUtils.java,分享给大家,希望可以帮到你。

工具类

git地址:https://gitee.com/learning-wo...

源码如下:

import lombok.Data;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * Spring容器工具类
 *
 * @author chentiefeng
 * @date 2020-10-23 11:37
 */
@Component
public class SpringContextUtils implements ApplicationContextAware {
    /**
     * 上下文对象
     */
    private static final AppContainer APP_CONTAINER = new AppContainer();

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {
        APP_CONTAINER.setApplicationContext(applicationContext);
    }

    /**
     * 获取ApplicationContext
     *
     * @return
     */
    public static ApplicationContext getApplicationContext() {
        return APP_CONTAINER.getApplicationContext();
    }

    /**
     * 通过clazz,从spring容器中获取bean
     *
     * @param clazz
     * @param 
     * @return
     */
    public static  T getBean(Class clazz) {
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 获取某一类型的bean集合
     *
     * @param clazz
     * @param 
     * @return
     */
    public static  Map getBeans(Class clazz) {
        return getApplicationContext().getBeansOfType(clazz);
    }

    /**
     * 通过name和clazz,从spring容器中获取bean
     *
     * @param clazz
     * @param 
     * @return
     */
    public static  T getBean(String name, Class clazz) {
        return getApplicationContext().getBean(name, clazz);
    }
    /**
    * 静态内部类,用于存放ApplicationContext
    */
    @Data
    public static class AppContainer {
        private ApplicationContext applicationContext;
    }

    /**
     * 获取配置文件配置项的值
     *
     * @param key 配置项key
     */
    public static String getEnvironmentProperty(String key) {
        return getApplicationContext().getEnvironment().getProperty(key);
    }

    /**
     * 获取spring.profiles.active
     */
    public static String[] getActiveProfile() {
        return getApplicationContext().getEnvironment().getActiveProfiles();
    }

}

使用示例

/**
 * 用户工具类,用于获取用户信息
 *
 * @author chentiefeng
 * @date 2021/2/8 17:38
 */
public class UserUtils {

    /**
     * 获取当前用户的ID
     * @return
     */
    public static UUID getCurrentUserId(){
        UserService userService = SpringContextUtils.getBeans(UserService.class);
        return userService.getCurrentUser().getId();
    }
}
本文由博客一文多发平台 OpenWrite 发布!

你可能感兴趣的:(spring)