package com.smart.common.util; 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.stereotype.Component; /** * 工具类 */ @Component public final class SpringUtils implements BeanFactoryPostProcessor { /** * Spring应用上下文环境的 Bean 工厂 */ private static ConfigurableListableBeanFactory beanFactory; @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { SpringUtils.beanFactory = beanFactory; } /** * 获取对象 * * @param name Bean 的名称 * @return Object 对应名称的 Bean 实例 * @throws org.springframework.beans.BeansException */ @SuppressWarnings("unchecked") public static T getBean(String name) throws BeansException { return (T) beanFactory.getBean(name); } /** * 获取类型为 requiredType 的对象 * * @param clz Bean 的类型 * @return 对应类型的 Bean 实例 * @throws org.springframework.beans.BeansException */ public static T getBean(Class clz) throws BeansException { @SuppressWarnings("unchecked") T result = (T) beanFactory.getBean(clz); return result; } /** * 判断 Bean 工厂中是否包含给定名称的 Bean * * @param name Bean 的名称 * @return boolean 如果包含给定名称的 Bean,则返回 true */ public static boolean containsBean(String name) { return beanFactory.containsBean(name); } /** * 判断给定名称的 Bean 是否是单例 * * @param name Bean 的名称 * @return boolean 如果指定名称的 Bean 是单例,则返回 true * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException */ public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { return beanFactory.isSingleton(name); } /** * 获取给定名称的 Bean 的类型 * * @param name Bean 的名称 * @return Class 注册对象的类型 * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException */ public static Class getType(String name) throws NoSuchBeanDefinitionException { return beanFactory.getType(name); } /** * 获取给定名称的 Bean 的别名 * * @param name Bean 的名称 * @return String[] Bean 的别名数组 * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException */ public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { return beanFactory.getAliases(name); } }