Spring扩展接口-ApplicationContextAware

119 阅读1分钟

简介

spring在创建当前bean时,会去调用ApplicationContextAware接口的扩展点。

public interface ApplicationContextAware extends Aware {
    void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
}

ApplicationContextAware有个方法setApplicationContext,可以获取到Spring的ApplicationContext上下文对象。ApplicationContext上下文继承了BeanFactory, 因而可以从上下文对象获取指定bean。如果该bean尚未创建,会触发bean的创建流程,功能跟BeanFactoryAware相同。

用途示例

内部获取Spring的ApplicationContext上下文,封装获取bean的工具类。

@Service
public class BeanFactoryUtils implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }


    public static <T> T getBean(String beanName) {
        Objects.requireNonNull(beanName, "beanName不能为空!");
        return (T) applicationContext.getBean(beanName);
    }

    public static <T> T getBean(Class<T> requiredType) {
        Objects.requireNonNull(requiredType, "requiredType不能为空!");
        return (T) applicationContext.getBean(requiredType);
    }

    public <T> Collection<T> getBeanList(Class<T> requiredType) {
        return MapUtils.emptyIfNull(applicationContext.getBeansOfType(requiredType)).values();
    }
}

更多信息请移步Spring专栏:www.yuque.com/mrhuang-ire…