240
世界上有2种人,一种懂二进制,另一种不懂二进制。

commons.tools.utils.SpringContextUtils 容器工具类

1、javar容器装配bean

2、问题

  在SpringBoot项目中,通常会遇到工具类中调用Spring容器中的Bean,由于工具类通常是静态方法,我们通常不使用自动注入,这时,

就需要一种不自动注入便可以从Spring容器中拿出Bean的工具了,这里我把我日常用的工具类SpringContextUtils。

3、代码实现

/**
 * Spring容器工具类
 */
@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 <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

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

    /**
     * 通过name和clazz,从spring容器中获取bean
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name, Class<T> 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();
    }

}

使用方法---》UserService userService = SpringContextUtils.getBeans(UserService.class);

 

4、解释

  方便拿到配置文件中的配置的资源信息。当一个类实现ApplicationContextAware之后,这个类就可以方便获得ApplicationContext中的所有的Bean。ApplicationContextAware的实现类中对Application 进行了初始化,所以实现这个类可以拿到当前上下文中所有的Bean。

posted @ 2022-06-17 10:27  _Origin  阅读(133)  评论(0编辑  收藏  举报