美文网首页
spring中ObjectFactory 和 ObjectPro

spring中ObjectFactory 和 ObjectPro

作者: Java编程日记 | 来源:发表于2022-03-29 13:20 被阅读0次

spring中ObjectFactory 和 ObjectProvider
这两个类是spring的提供的工厂方法的辅助类, ObjectFactory在 1.0.2版本添加进去的,他只有一个getObject方法 ObjectProvider在4.3版本添加,它继承了ObjectFactory接口,添加了更多方法,如 getIfAvailable ,这种可选方法。

请看下面的相关源码,这里是解析自动注入依赖的方法,他会检测到依赖注入的是Optional,ObjectFactory,ObjectProvider,Provider进行特殊处理。

org.springframework.beans.factory.support.DefaultListableBeanFactory#resolveDependency

public Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName,
@Nullable Set<String> autowiredBeanNames, @Nullable TypeConverter typeConverter) throws BeansException {

descriptor.initParameterNameDiscovery(getParameterNameDiscoverer());
if (Optional.class == descriptor.getDependencyType()) {
    return createOptionalDependency(descriptor, requestingBeanName);
}
else if (ObjectFactory.class == descriptor.getDependencyType() ||
        ObjectProvider.class == descriptor.getDependencyType()) {
    return new DependencyObjectProvider(descriptor, requestingBeanName);
}
else if (javaxInjectProviderClass == descriptor.getDependencyType()) {
    return new Jsr330Factory().createDependencyProvider(descriptor, requestingBeanName);
}
else {
    Object result = getAutowireCandidateResolver().getLazyResolutionProxyIfNecessary(
            descriptor, requestingBeanName);
    if (result == null) {
        result = doResolveDependency(descriptor, requestingBeanName, autowiredBeanNames, typeConverter);
    }
    return result;
}

}
除了上面两个类之外,还可以使用 javax.inject.Provider 类代替,但功能比较简单和ObjectFactory一致。

相关文章

网友评论

      本文标题:spring中ObjectFactory 和 ObjectPro

      本文链接:https://www.haomeiwen.com/subject/okcyjrtx.html