具体来说,我只使用spring来通过ApplicationContext配置我的项目。在我的spring xml中,我通过PropertyPlaceholderConfigurer加载了一些bean属性。每当在依赖关系中我将commons-logging-x.x与jcl-slf4j.jar交换时,上下文的加载就会因占位符替换上的ClassNotFoundExceptions而失败。例如:
在我的spring.xml中有:
<bean id="testbean" class="${testbean.implementingClass}"/>
其中testbean.implementingClass在spring.properties中定义:
testbean.implementingClass=my.implementation.TestClass
如果我使用commons-logging jar运行项目,那么一切都很完美。如果我将其更改为jcl-slf4j,那么我得到ClassNotFoundException,找不到类[$ {testbean.implementingClass}],即它没有进行占位符替换。有人观察过这个吗?
编辑:我的问题与罐子无关,因为: 来自http://www.slf4j.org/legacy.html:
我们通过SLF4J实现的JCL将允许您逐步迁移到SLF4J,特别是如果您的软件依赖的某些库在可预见的将来继续使用JCL。您可以立即享受SLF4J可靠性带来的好处,同时保持向后兼容性。只需用jcl-over-slf4j.jar替换commons-logging.jar。随后,底层日志框架的选择将由SLF4J而不是JCL完成,但没有类加载器头痛困扰JCL。底层日志记录框架可以是SLF4J支持的任何框架。通常,用jcl-over-slf4j.jar替换commons-logging.jar将立即永久地解决与公共日志记录相关的类加载器问题。
答案 0 :(得分:1)
使用jcl-slf4j
时,必须确保已从项目中排除所有commons-logging
个依赖关系。确保类路径中的任何位置都没有commons-logging jar。