And*_*niy 5 java logging dependency-injection cdi jakarta-ee
免责声明:这个问题并不是“基于意见”。我正在寻找强大的优点和缺点。
在 CDI 应用程序中,更传统且更适合使用的是:静态记录器:
private static final Logger LOGGER = LoggerFactory.getLogger...;
或者有特定的生产者注入它?
@Inject
private Logger logger;
前一个的优点是我们可以创建自己的 LoggerFactory 包装器(出于某些目的)并在所有地方使用它,而不必担心有人滥用了另一个工厂。但是这种方法还有其他缺点/优点吗?什么更“规范”?
由于所有 CDI Bean 都是轻量级代理,因此没有真正的缺点。关于记录器是单例的评论并不完全准确,具体取决于您如何实现它。以下将根据目标注入正确的记录器实例:
@Produces
@Dependent
public Logger createLogger(final InjectionPoint injectionPoint) {
Class<?> declaringClass = injectionPoint.getMember().getDeclaringClass();
return LoggerFactory.getLogger(declaringClass);
}
Run Code Online (Sandbox Code Playgroud)
优势实际上取决于测试......您现在可以模拟注入并仅测试您的实际业务代码。静态函数通常很难模拟,这提供了一种不需要处理它们的非常干净的方法。
| 归档时间: |
|
| 查看次数: |
589 次 |
| 最近记录: |