零基础悟透javaScript

SpringUtil最佳实践

2019-08-03  本文已影响0人  千淘萬漉

我们知道在Spring工程中,由Spring托管的对象可以注入依赖,由Spring帮我们管理了所有声明了的Bean,但是在编码中也偶尔会遭遇到一个普通的Java类中,想直接使用Spring提供的Bean,这样往往就需要通过Spring的上下文对象从中拿到一个我们想要的bean对象,这样的需求还不少,除了获得Spring托管的Bean,可能还需要发布事件、获取环境信息等等,这样就需要一个Spring的工具类,提供这样一些静态方法,我这里总结了一个不错的满足上类需求的SpringUtil工具类:

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * Spring工具类
 */
@Slf4j
@Component
public class SpringUtil implements ApplicationContextAware {

    /**
     * spring全局配置项
     */
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        if (applicationContext == null) {
            applicationContext = context;
            log.info("ApplicationContext init success,you can invoke by SpringUtil.getApplicationContext() to get ApplicationContext,init bean count="
                    + applicationContext.getBeanDefinitionCount() + ",bean=" + JSONObject.toJSONString(applicationContext.getBeanDefinitionNames()));
        }
    }

    /**
     * @return spring全局配置项
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 通过name获取 Bean.
     *
     * @param name
     * @return
     */
    public static <T> T getBean(String name) {
        return (T) applicationContext.getBean(name);
    }

    /**
     * 通过class获取Bean.
     *
     * @param clazz
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
        return applicationContext.getBean(clazz);
    }

    /**
     * 通过name,以及Clazz返回指定的Bean
     *
     * @param name
     * @param clazz
     * @return
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return applicationContext.getBean(name, clazz);
    }

    /**
     * 获取实现相关接口的类关系
     *
     * @param clazz
     * @return
     */
    public static <T> Map<String, T> getBeansOfType(Class<T> clazz) {
        return applicationContext.getBeansOfType(clazz);
    }

    /**
     * 发布事件
     *
     * @param event
     */
    public static void publishEvent(ApplicationEvent event) {
        applicationContext.publishEvent(event);
    }

    /**
     * 获取环境信息
     */
    public static Environment getEnvironment() {
        return applicationContext.getEnvironment();
    }
    
}

其中:@Slf4j是基于Lombok的插件。

上一篇下一篇

猜你喜欢

热点阅读