gpt4 book ai didi

java - 通过 CDI 注入(inject)记录器,一种反模式?

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:43 25 4
gpt4 key购买 nike

查看这段代码:

@Stateless
public class AStatelessEJB {

@Inject
private Logger logger;

(...)

为什么 CDI 将一个通常是最终的和静态的记录器注入(inject)到无状态 EJB 中(作为实例变量)?

有什么优势吗?或者只有缺点,例如:

  • CDI 查找开销(每个 bean 初始化)
  • CDI 初始化的开销(每个 bean 初始化)
  • CDI 注入(inject)的开销(每个 bean 初始化)
  • 垃圾收集器清理的开销(每次 bean 被销毁时)

最佳答案

如果你从性能的角度来评估它......没有太大的区别,但静态初始化通常比托管 bean 更好。

通常,CDI 在应用程序初始化和上下文实例创建时需要更多处理。它将需要在生产者方法/类中多几行,但会提供易用性和某种灵 active 。顺便说一句,使用 CDI,您可以使用最少的生产者方法为每个类或应用程序管理一个实例。

优点:

  • 易于从通用日志框架提供抽象
  • 易于添加对国际化和本地化等附加功能的支持
  • 易于使用(像使用注释一样简单)
  • 易于管理多个实现/配置(简单如使用多个限定符)
  • 标准化使用(像其他领域一样)

缺点:

  • 额外的最小处理成本
  • Lombok 等其他工具易于使用,也提供注释配置(在编译时以静态方式)。
  • 通常不需要日志的附加功能(如国际化/本地化)。

在我看来和总结中,我更喜欢使用静态字段,但如果您想要特定的抽象点、提供额外的功能、提供多个 Logger 实现/配置或提供一些易于使用的东西,使用 cdi bean 并不是一个坏习惯供开发人员使用。

关于java - 通过 CDI 注入(inject)记录器,一种反模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57497729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com