Jakarta ee 如何忽略/否决CDI生产者方法?

Jakarta ee 如何忽略/否决CDI生产者方法?,jakarta-ee,cdi,java-ee-7,Jakarta Ee,Cdi,Java Ee 7,我知道我可以让我们忽略豆子 但是,我想忽略生产者提供的bean。e、 g:我想在生产环境中忽略这一点 @Produces @ApplicationScoped @Development EnvironmentDao developmentDao() { return new DevelopmentDao() } 有人有线索吗? 多谢各位 @更新 实际上我有另一个解决方案,比如 @Development @ApplicationScoped class DevelopmentProduc

我知道我可以让我们忽略豆子

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

@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方法而不是整个producer


谢谢。

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

事实上,event
@Alternative
不会起作用。但是,
@Specializes
将起作用,因为bean类将被真正删除,因此无法找到生产者。但那不是你想要的


您还可以使用
扩展名
观察事件。它不提供否决权方法,但您可以在
setProducer
方法中用一个新的符合您需要的生产者替换此类生产者。

如果您有
@Development
限定符,我想您也有一种
@Production
环境DAO限定符?您应该查看
@Alternative
以启用/禁用bean。@Rouliboy,实际上
@Development
不是限定符。此外,我正在寻找一个不使用替代方案的解决方案。谢谢。那么什么是
@Development
?@rouliboy'@Development'只是一个痛苦的注释,它用来表示bean是一个“开发”bean