Gar*_*ead 4 java spring annotations
我正在使用Spring 2.5.4并且正在创建一个我正在部署到Weblogic上的Java应用程序.
我在我的代码中使用的外部库(包含在我的应用程序生成的WAR文件的WEB-INF/classes目录中)中有一个类.我在代码中为类的对象创建了一个实例变量,并添加了@Autowired注释和getter以及setter.在我的应用程序上下文文件中,我已声明了库类的类型的bean并添加了以下内容:
<context:annotation-config />
<context:component-scan base-package="com.mycompany" />
Run Code Online (Sandbox Code Playgroud)
...为了注册将扫描类并处理注释的AutowiredAnnotationBeanPostProcessor.
当我尝试部署应用程序时,出现以下错误:
java.lang.IllegalStateException: Annotation-specified bean name 'myBean' for bean
class [com.mycompany.package.ClassName] conflicts with existing, non-compatible
bean definition of same name and class [com.mycompany.otherPackage.ClassName]
Run Code Online (Sandbox Code Playgroud)
我认为这是因为库中有一个类与我的应用程序代码中的一个同名(两个类的包名都以"com.mycompany"开头).铌.这不是我添加的课程,而是另一课程.有没有办法在不更改应用程序中类的名称的情况下绕过这个问题?
谢谢你的帮助.
Pav*_*hev 15
老问题,但抛出我的2c不良经验与类似的问题.如果你有2个具有相同名称的类,但是在不同的包中有一段时间你的其他类被失败的Spring上下文引用了吗?如果是这样,我建议清理AS缓存文件(通常是提取WAR的位置),清理/重建WAR并再次部署.还建议重新启动应用服务器.我发现应用程序服务器和Web容器(Weblogic,WAS,Jboss,Tomcat)都倾向于留下旧类,当部署应用程序时,这些陈旧的.class文件通过一些旧的引用加载到JVM中,这些文件大多数时候都是混乱的. Spring上下文加载器.
典型的情况是,您将一个类从一个包重命名/移动到另一个包,或者甚至保持包名相同但将其移动到另一个模块(jar).在这种情况下,AS工作目录中的缓存(遗留)文件会引起很大的麻烦.清除AS中的工作目录应该彻底解决问题.
| 归档时间: |
|
| 查看次数: |
20617 次 |
| 最近记录: |