【问题标题】:How to ignore/veto CDI producer method?如何忽略/否决 CDI 生产者方法?
【发布时间】:2017-09-25 09:18:16
【问题描述】:

我知道我可以ProcessAnnotatedType.veto() 忽略 bean。

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

谢谢。

【问题讨论】:

  • 如果你有一个@Development 限定符,我想你也有一种@Production EnvironnementDAO 的限定符?你应该看看@Alternative 来启用/禁用bean。
  • @Rouliboy,实际上@Development 不是限定符。此外,我正在寻求不使用替代方案的解决方案。谢谢。
  • 那么@Development是什么?
  • @RouliboyThe '@Development' 只是一个痛苦的注解,它用来表明 bean 是一个“开发”bean

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 2015-10-01
    • 2016-04-18
    • 2011-11-20
    • 1970-01-01
    • 2023-03-29
    • 2015-04-08
    • 1970-01-01
    相关资源
    最近更新 更多