ignore/veto CDI制作方法如何?

How to ignore/veto CDI producer method?

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

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

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

有人知道吗? 谢谢。

@更新 其实我有另一个解决方案,比如

@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。但是,我想知道是否有任何方法可以忽略生产者方法而不是整个生产者?

谢谢。

CDI 没有提供直接禁用生产者的方法。

事实上,事件 @Alternative 不会起作用。但是,@Specializes 会起作用,因为 bean class 会真正被删除,因此找不到生产者。但这不是你想要的。

您还可以利用 Extension 并观察 ProcessProducer 事件。它不提供否决方法,但您可以在 setProducer 方法中用适合您需要的新生产者替换此类生产者。