何时在Spring中使用javax.inject.Provider?
它的作用非常简单:
@Injectprivate Provider<ProductService> productService;
产品服务可通过以下服务获得productService.get()
,.get()
并将在每次调用时从Spring上下文解析实例。
但是我什么时候应该使用它?在哪里
我的主要用例非常简单:当我获得循环依赖关系时,提供程序将在运行时帮助解决依赖关系。但是,如果只是在由于循环依赖而无法创建上下文的情况下将其丢弃,则它看起来有些随机。
关于提供者的使用是否存在任何已知模式?
回答:
该接口与寻找原型实例时org.springframework.beans.factory.ObjectFactory<T>
通常用于避免BeanFactory.getBean()
在客户端代码中调用的接口等效。通常用于ObjectFactoryCreatingFactoryBean
获取由来源的Bean原型BeanFactory
。
来自ObjectFactoryCreatingFactoryBean
javadocs的示例:
<beans> <!-- Prototype bean since we have state -->
<bean id="myService" class="a.b.c.MyService" scope="prototype"/>
<bean id="myServiceFactory"
class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
<property name="targetBeanName"><idref local="myService"/></property>
</bean>
<bean id="clientBean" class="a.b.c.MyClientBean">
<property name="myServiceFactory" ref="myServiceFactory"/>
</bean>
</beans>
使用Providers
,您可以ProviderCreatingFactoryBean
改用。
解决相同问题的另一个选择(使用继承代替合成)是
查找方法注入
以上是 何时在Spring中使用javax.inject.Provider? 的全部内容, 来源链接: utcz.com/qa/423769.html