Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过CDI注入记录器,一种反模式?_Java_Design Patterns_Ejb_Instance_Cdi - Fatal编程技术网

Java 通过CDI注入记录器,一种反模式?

Java 通过CDI注入记录器,一种反模式?,java,design-patterns,ejb,instance,cdi,Java,Design Patterns,Ejb,Instance,Cdi,查看此代码: @Stateless public class AStatelessEJB { @Inject private Logger logger; (...) 为什么一个记录器(通常是最终的和静态的)被CDI注入一个无状态EJB(作为一个实例变量) 有什么优势吗?或者仅仅是缺点,例如: CDI查找的开销(每个bean初始化) CDI初始化的开销(每个bean初始化) CDI注入的开销(每个bean初始化) 垃圾收集器清理的开销(每次bean被销毁时) 如果您从性能角度对其进行评估

查看此代码:

@Stateless
public class AStatelessEJB {

@Inject
private Logger logger;

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

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

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

如果您从性能角度对其进行评估。。。虽然没有太大的区别,但是静态初始化通常比托管bean好

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

优势:

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

  • 额外的最低处理成本
  • 其他工具(如Lombok)提供了易用性,并提供了注释配置(在编译时和静态方式)
  • 日志通常不需要其他功能(如国际化/本地化)
根据我的观点和总结,我更喜欢使用静态字段,但如果您想要某个抽象点、提供附加功能、提供多个记录器实现/配置或为开发人员提供一些易于使用的功能,那么使用cdi bean并不是一个坏做法。

相关: