spring更加松散的获取bean的方式ObjectProvider

概述

ObjectProvider直译就是对象提供者;

平时从spring中获取bean都是调用beanFactory.getBean()方法,如果bean不存在则会直接抛异常;

spring 4.3开始引入了org.springframework.beans.factory.ObjectProvider接口,其提供了若干的方法,可以更松散的获取bean.

BeanFactory中也有定义返回值是ObjectProvider的相关方法;

ObjectProvider方法解释

直接引用一波网上现成的翻译

public interface ObjectProvider<T> extends ObjectFactory<T>, Iterable<T> {
   

	// 返回指定类型的bean, 如果容器中不存在, 抛出NoSuchBeanDefinitionException异常
    // 如果容器中有多个此类型的bean, 抛出NoUniqueBeanDefinitionException异常
	T getObject(Object... args) throws BeansException;

	// 如果指定类型的bean注册到容器中, 返回 bean 实例, 否则返回 null
	@Nullable
	T getIfAvailable() throws BeansException;

	// 如果返回对象不存在,则进行回调,回调对象由Supplier传入
	default T getIfAvailable(Supplier<T> defaultSupplier) throws BeansException {
   
		T dependency = getIfAvailable();
		return (dependency != null ? dependency : defaultSupplier.get());
	}

	 // 消费对象的一个实例(可能是共享的或独立的),如果存在通过Consumer回调消耗目标对象。
	default void ifAvailable(Consumer<T> dependencyConsumer) throws BeansException {
   
		T dependency = getIfAvailable();
		if (dependency != null) {
   
			dependencyConsumer.accept(dependency);
		}
	}

	// 如果不可用或不唯一(没有指定primary)则返回null。否则,返回对象。
	@Nullable
	T getIfUnique() throws BeansException;

	// 如果存在唯一对象,则调用Supplier的回调函数
	default T getIfUnique(Supplier<T> defaultSupplier) throws BeansException {
   
		T dependency = getIfUnique();
		return (dependency != null ? dependency : defaultSupplier.get());
	}

	// 如果存在唯一对象,则消耗掉该对象
	default void ifUnique(Consumer<T> dependencyConsumer) throws BeansException {
   
		T dependency = getIfUnique();
		if (dependency != null) {
   
			dependencyConsumer.accept(dependency);
		}
	}

	// 返回符合条件的对象的Iterator,没有特殊顺序保证(一般为注册顺序)
	@Override
	default Iterator<T> iterator() {
   
		return stream().iterator();
	}

	// 返回符合条件对象的连续的Stream,没有特殊顺序保证(一般为注册顺序)
	default Stream<T> stream() {
   
		throw new UnsupportedOperationException("Multi element access not supported");
	}

	// 返回符合条件对象的连续的Stream。在标注Spring应用上下文中采用@Order注解或实现Order接口的顺序
	default Stream<T> orderedStream() {
   
		throw new UnsupportedOperationException("Ordered element access not supported");
	}
}

参考文章
https://www.cnblogs.com/secbro/p/11974729.html

相关推荐

  1. spring更加松散获取bean方式ObjectProvider

    2023-12-11 12:46:02       48 阅读
  2. Spring Bean获取方法 (手动注入bean)超级实用

    2023-12-11 12:46:02       40 阅读
  3. Spring手动获取bean四种方式

    2023-12-11 12:46:02       29 阅读
  4. 使用SpringContextHolder获取 Spring 容器中 Bean

    2023-12-11 12:46:02       24 阅读
  5. Spring Bean 一生

    2023-12-11 12:46:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-11 12:46:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-11 12:46:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-11 12:46:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-11 12:46:02       20 阅读

热门阅读

  1. 代码随想录-刷题第二十二天

    2023-12-11 12:46:02       45 阅读
  2. RabbitMQ学习

    2023-12-11 12:46:02       28 阅读
  3. 使用TensorFlow构建深度学习模型

    2023-12-11 12:46:02       39 阅读
  4. K8S学习指南(6)-k8s核心概念label和label selector

    2023-12-11 12:46:02       32 阅读
  5. Flask+vue+axios完成导出Excel表格的功能

    2023-12-11 12:46:02       42 阅读