SpringBoot 上下文获取注入的Bean(转载)

前言

用到了两篇文章

代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @author qilong.sun
 * @version v1.0
 * @time 2021/5/18 10:30
 * @title
 * @description 转载自:https://blog..net/weixin_30855099/article/details/97504848
 */
@Component
@Slf4j
public class ApplicationContextProvider implements ApplicationContextAware {
          
   
    /**
     * 上下文对象实例
     */
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
          
   
        // 原来的代码
        // this.applicationContext = applicationContext;

        // 新代码(SpringIoc容器对象获取工具,解决反射出来的对象的属性注入为空的问题)
        // https://blog..net/sgl520lxl/article/details/103694063
        if(ApplicationContextProvider.applicationContext == null) {
          
   
            ApplicationContextProvider.applicationContext = applicationContext;
        }
    }

    /**
     * 获取applicationContext
     *
     * @return
     */
    public static ApplicationContext getApplicationContext() {
          
   
        return applicationContext;
    }

    /**
     * 通过name获取 Bean.
     *
     * @param name
     * @return
     */
    public static Object getBean(String name) {
          
   
        return getApplicationContext().getBean(name);
    }

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

    /**
     * 通过name,以及Clazz返回指定的Bean
     *
     * @param name
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name, Class<T> clazz) {
          
   
        return getApplicationContext().getBean(name, clazz);
    }
}
经验分享 程序员 微信小程序 职场和发展