简介
spring在创建当前bean时,会去调用ApplicationContextAware接口的扩展点,ApplicationContextAware有个方法setApplicationContext。
实现ApplicationContextAware接口,可以获取到Spring的ApplicationContext上下文对象。ApplicationContext上下文继承了BeanFactory, 因而可以从上下文对象获取指定bean。如果该bean尚未创建,会触发bean的创建流程,功能跟BeanFactoryAware相同。
示例
@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();
}
}
网友评论