作为我软件发展的一部分,我试图将Spring的配置从XML移到基于注释的配置(我发现操作某些配置元素更容易)。
只要我在Maven中运行单元测试,一切正常,但是当我尝试使用我项目的另一个模块中生成的签名jar时,我会收到错误,说明来自CGLIB增强类的签名者信息没有不匹配同一个包中的其他类。
考虑到这个问题,我发现显然Spring总是会使用CGLIB来增强@Configuration类,然后CGLIB似乎对签名的jar没有好用,因为它动态创建的类与原来的类位于同一个包中
有没有人想过在签名的jar中使用Java配置的方法?
PS:我仔细检查了包裹名称在其他任何地方都不存在;)
答案 0 :(得分:1)
在Spring JIRA(https://jira.spring.io/browse/SPR-12833)上提出同样的问题之后,似乎CGLIB和签名的jar之间确实存在冲突,这会影响基于Spring的应用程序。
那说一个简单的解决方法是在类上使用@Component注释而不是@Configuration。我不能100%确定副作用是什么,但对我来说效果很好。
答案 1 :(得分:0)
我对使用CGLIB的AOP代理有类似的问题。我挖得更深一些,发现这个问题已经在原始CGLIB存储库中解决了。我希望Spring团队将它合并到他们的CGLIB版本中。在他们修复它之前,我使用我的解决方法为ApplicationContext
的自定义类加载器进行了禁用安全检查。
我在my blog中描述了这个解决方案,我希望它对某些人有用。