如何忽略/否决CDI制作人方法?

时间:2017-04-27 14:04:05

标签: java-ee cdi java-ee-7

我知道我可以让我们ProcessAnnotatedType.veto()忽略这个豆。

但是,我想忽略生产者提供的bean。例如:我想在生产环境中忽略这一点

@Produces
@ApplicationScoped
@Development
EnvironmentDao developmentDao() {
    return new DevelopmentDao()
}

有人有线索吗? 谢谢。

@Update 实际上我有另一个解决方案,如

@Development
@ApplicationScoped
class DevelopmentProducer {
  @Produces
  EnvironmentBean developmentBean = new EnvironmentBean() {
    @Override
    String getText() {
        return 'I am DevelopmentBean'
    }
  }

  @Produces
  @ApplicationScoped
  EnvironmentDao developmentDao() {
    return new DevelopmentDao()
  }
}

这样我就可以使用ProcessAnnotatedType来忽略这个Producer。但是,我想知道是否有任何方法只是忽略生产者方法而不是整个生产者?

谢谢。

1 个答案:

答案 0 :(得分:2)

CDI没有提供禁用制作人的简单方法。

事实上,事件@Alternative无法奏效。但是,@Specializes将起作用,因为bean类将被真正删除,因此找不到生成器。但那不是你以后的那种。

您还可以使用Extension并观察ProcessProducer事件。它不提供否决方法但您可以使用符合setProducer方法的新方法替换此类生产者。