All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.emily.infrastructure.tracing.ioc.IocUtils Maven / Gradle / Ivy

The newest version!
package com.emily.infrastructure.tracing.ioc;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.lang.Nullable;

import java.lang.annotation.Annotation;
import java.util.Map;

/**
 * IOC容器实例上下文,可以获取容器内部的实例对象
 *
 * @author Emily
 * @since 2021/5/13
 */
@SuppressWarnings("all")
public class IocUtils {

    private static ApplicationContext applicationContext;

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static void setApplicationContext(ApplicationContext applicationContext) {
        IocUtils.applicationContext = applicationContext;
    }

    /**
     * 获取指定Class类型的实例对象
     *
     * @param requiredType 实例类型
     * @param           泛型类类型
     * @return bean实例对象
     */
    public static  T getBean(Class requiredType) {
        return applicationContext.getBean(requiredType);
    }

    /**
     * 获取指定bean实例名称的实例对象
     *
     * @param name bean名称
     * @return bean实例对象
     * @throws BeansException 异常
     */
    public static Object getBean(String name) {
        return applicationContext.getBean(name);
    }

    /**
     * 获取指定beanname的实例对象,并且转换为指定类型
     *
     * @param name         bean实例名称
     * @param requiredType 目标类型
     * @param           类型
     * @return bean实例对象
     */
    public static  T getBean(String name, Class requiredType) {
        return applicationContext.getBean(name, requiredType);
    }

    /**
     * 实例对象必须是原型模式
     *
     * @param name bean的名称
     * @param args 实例参数
     * @return bean对象
     */
    public static Object getBean(String name, Object... args) {
        return applicationContext.getBean(name, args);
    }

    /**
     * 获取指定注解标注的实例bean集合
     *
     * @param annotationType 注解类型
     * @return 注解标注的bean对象
     */
    public static Map getBeansWithAnnotation(Class annotationType) {
        return applicationContext.getBeansWithAnnotation(annotationType);
    }

    /**
     * 获取指定注解类型标注的bean实例名称
     *
     * @param annotationType 主机类型
     * @return 注解标注的beanname
     */
    public static String[] getBeanNamesForAnnotation(Class annotationType) {
        return applicationContext.getBeanNamesForAnnotation(annotationType);
    }

    /**
     * 判定IOC容器中是否存在指定名称的实例bean
     *
     * @param name bean实例名称
     * @return true|false
     */
    public static boolean containsBean(String name) {
        return applicationContext.containsBean(name);
    }

    /**
     * 判定指定bean 名称的实例是否是原型模式
     *
     * @param name bean实例名称
     * @return true|false
     */
    public static boolean isPrototype(String name) {
        return applicationContext.isPrototype(name);
    }

    /**
     * 判定指定的bean实例是否是单例模式
     *
     * @param name bean实例名称
     * @return true|false
     */
    public static boolean isSingleton(String name) {
        return applicationContext.isSingleton(name);
    }

    /**
     * 判定指定bean名称是否和指定的类型匹配
     *
     * @param name        bean实例名称
     * @param typeToMatch 匹配的类类型
     * @return 是否和指定的类型匹配
     */
    public static boolean isTypeMatch(String name, Class typeToMatch) {
        return applicationContext.isTypeMatch(name, typeToMatch);
    }

    /**
     * 获取指定类的所有类实例对象
     *
     * @param type 类class对象
     * @param   类
     * @return 返回实例对象的集合
     */
    public static  Map getBeansOfType(@Nullable Class type) {
        return applicationContext.getBeansOfType(type);
    }

    /**
     * 获取指定类的所有类实例对象
     *
     * @param type                 类class对象
     * @param includeNonSingletons 是否包含非单例对象
     * @param allowEagerInit       是否允许初始化lazy延迟加载初始化类和FactoryBean定义初始化类
     * @param                   类
     * @return 返回实例对象的集合
     */
    public static  Map getBeansOfType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit) {
        return applicationContext.getBeansOfType(type, includeNonSingletons, allowEagerInit);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy