我正在尝试将jsf2应用程序从managed beans
转换为CDI
。
所以我正在学习并发现CDI
的优势。这看起来很棒,但producer
还有一些我不理解的东西。
关于CDI
我读到其中一个优点是减少coupling
。我做了一些接口实验,一些实现,@default
,@alternate
,@inject
。它正在完成这项工作。在那种情况下,我可以看到耦合'减少'。
但是在实现日志记录的生产者时,我没有看到它。
现在我正在使用像
这样的东西Logger log = LoggerFactory.getLogger(MyClass.class);
使用CDI,在创建生产者之后,我有
@Inject
Logger logger;
好吧,它更短但是Logger类仍然与例如log4j的。
因此,如果我想使用另一个记录器库,我仍然需要修改我的所有类。
有什么我不理解的吗?
答案 0 :(得分:2)
你的想法并不坏,它确实有助于抽象出你使用的记录器。 但是,您可能需要使用日志适配器(如slf4j(https://www.slf4j.org/)或commons-logging),这将有助于您在不同的记录器实现(log4j等)之间进行选择,但保持相同的日志记录接口。
然后,您可以在CDI中保留一个可以随意自定义的生产者方法。