如何限制注入不是基于@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;
...