如何限制注入不是基于@ConditionalOnProperty 创建的条件 bean
How to restrict Injection of Conditional beans which are not created based on @ConditionalOnProperty
在 JavaConfig 中,我使用 @ConditionalOnProperty
定义了条件 Bean,如下所示,因此当 属性 文件中定义 couchbase.multiBucket.t1CBProvider
时,只有 bean t1CBProvider
将被创建。
@Bean("t1CBProvider")
@ConditionalOnProperty(prefix = "couchbase.multiBucket", name = "t1CBProvider")
public ICouchbaseDTOProvider provider() {
return new CouchbaseDTOProvider("t1CBProvider");
}
现在在 Java class ArchiveRepo
之一中我已经注入了 class 如下,这样我就可以使用它了。 ArchiveRepo
class 中定义了各种其他 Bean 注入和方法,因此即使 CouchbaseDTOProvider
不是由 JavaConfig 创建的,我也需要它。
public class ArchiveRepo{
.
@Inject
@Qualifier("t1CBProvider")
private ICouchbaseDTOProvider t1CBProvider;
...
现在,如果 couchbase.multiBucket.t1CBProvider
值未在属性文件中定义,bean CouchbaseDTOProvider
将不会被创建,我们将得到 No Such Bean Found Exception。我们如何限制 ICouchbaseDTOProvider
的依赖注入,如果没有创建 bean,对 bean 的依赖注入也会受到限制或无效,并且我们在创建“ArchiveRepo”对象时没有任何问题class.
您可以按照评论中的建议执行 @Autowired(required = false) 或使用可选的定义此变量,如下所示:
public class ArchiveRepo{
.
@Inject
@Qualifier("t1CBProvider")
private optional<ICouchbaseDTOProvider> t1CBProvider;
...
在 JavaConfig 中,我使用 @ConditionalOnProperty
定义了条件 Bean,如下所示,因此当 属性 文件中定义 couchbase.multiBucket.t1CBProvider
时,只有 bean t1CBProvider
将被创建。
@Bean("t1CBProvider")
@ConditionalOnProperty(prefix = "couchbase.multiBucket", name = "t1CBProvider")
public ICouchbaseDTOProvider provider() {
return new CouchbaseDTOProvider("t1CBProvider");
}
现在在 Java class ArchiveRepo
之一中我已经注入了 class 如下,这样我就可以使用它了。 ArchiveRepo
class 中定义了各种其他 Bean 注入和方法,因此即使 CouchbaseDTOProvider
不是由 JavaConfig 创建的,我也需要它。
public class ArchiveRepo{
.
@Inject
@Qualifier("t1CBProvider")
private ICouchbaseDTOProvider t1CBProvider;
...
现在,如果 couchbase.multiBucket.t1CBProvider
值未在属性文件中定义,bean CouchbaseDTOProvider
将不会被创建,我们将得到 No Such Bean Found Exception。我们如何限制 ICouchbaseDTOProvider
的依赖注入,如果没有创建 bean,对 bean 的依赖注入也会受到限制或无效,并且我们在创建“ArchiveRepo”对象时没有任何问题class.
您可以按照评论中的建议执行 @Autowired(required = false) 或使用可选的定义此变量,如下所示:
public class ArchiveRepo{
.
@Inject
@Qualifier("t1CBProvider")
private optional<ICouchbaseDTOProvider> t1CBProvider;
...