概述
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@NullableT 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。否则,返回对象。@NullableT 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,没有特殊顺序保证(一般为注册顺序)@Overridedefault 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