package com.ruoyi.common.utils.spring; 
 | 
  
 | 
import org.springframework.aop.framework.AopContext; 
 | 
import org.springframework.beans.BeansException; 
 | 
import org.springframework.beans.factory.NoSuchBeanDefinitionException; 
 | 
import org.springframework.beans.factory.config.BeanFactoryPostProcessor; 
 | 
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; 
 | 
import org.springframework.context.ApplicationContext; 
 | 
import org.springframework.context.ApplicationContextAware; 
 | 
import org.springframework.stereotype.Component; 
 | 
import com.ruoyi.common.utils.StringUtils; 
 | 
  
 | 
/** 
 | 
 * spring工具类 方便在非spring管理环境中获取bean 
 | 
 *  
 | 
 * @author ruoyi 
 | 
 */ 
 | 
@Component 
 | 
public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware  
 | 
{ 
 | 
    /** Spring应用上下文环境 */ 
 | 
    private static ConfigurableListableBeanFactory beanFactory; 
 | 
  
 | 
    private static ApplicationContext applicationContext; 
 | 
  
 | 
    @Override 
 | 
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException  
 | 
    { 
 | 
        SpringUtils.beanFactory = beanFactory; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException  
 | 
    { 
 | 
        SpringUtils.applicationContext = applicationContext; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取对象 
 | 
     * 
 | 
     * @param name 
 | 
     * @return Object 一个以所给名字注册的bean的实例 
 | 
     * @throws org.springframework.beans.BeansException 
 | 
     * 
 | 
     */ 
 | 
    @SuppressWarnings("unchecked") 
 | 
    public static <T> T getBean(String name) throws BeansException 
 | 
    { 
 | 
        return (T) beanFactory.getBean(name); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取类型为requiredType的对象 
 | 
     * 
 | 
     * @param clz 
 | 
     * @return 
 | 
     * @throws org.springframework.beans.BeansException 
 | 
     * 
 | 
     */ 
 | 
    public static <T> T getBean(Class<T> clz) throws BeansException 
 | 
    { 
 | 
        T result = (T) beanFactory.getBean(clz); 
 | 
        return result; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true 
 | 
     * 
 | 
     * @param name 
 | 
     * @return boolean 
 | 
     */ 
 | 
    public static boolean containsBean(String name) 
 | 
    { 
 | 
        return beanFactory.containsBean(name); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) 
 | 
     * 
 | 
     * @param name 
 | 
     * @return boolean 
 | 
     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException 
 | 
     * 
 | 
     */ 
 | 
    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException 
 | 
    { 
 | 
        return beanFactory.isSingleton(name); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * @param name 
 | 
     * @return Class 注册对象的类型 
 | 
     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException 
 | 
     * 
 | 
     */ 
 | 
    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException 
 | 
    { 
 | 
        return beanFactory.getType(name); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 如果给定的bean名字在bean定义中有别名,则返回这些别名 
 | 
     * 
 | 
     * @param name 
 | 
     * @return 
 | 
     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException 
 | 
     * 
 | 
     */ 
 | 
    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException 
 | 
    { 
 | 
        return beanFactory.getAliases(name); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取aop代理对象 
 | 
     *  
 | 
     * @param invoker 
 | 
     * @return 
 | 
     */ 
 | 
    @SuppressWarnings("unchecked") 
 | 
    public static <T> T getAopProxy(T invoker) 
 | 
    { 
 | 
        return (T) AopContext.currentProxy(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取当前的环境配置,无配置返回null 
 | 
     * 
 | 
     * @return 当前的环境配置 
 | 
     */ 
 | 
    public static String[] getActiveProfiles() 
 | 
    { 
 | 
        return applicationContext.getEnvironment().getActiveProfiles(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取当前的环境配置,当有多个环境配置时,只获取第一个 
 | 
     * 
 | 
     * @return 当前的环境配置 
 | 
     */ 
 | 
    public static String getActiveProfile() 
 | 
    { 
 | 
        final String[] activeProfiles = getActiveProfiles(); 
 | 
        return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null; 
 | 
    } 
 | 
} 
 |