我目前正在开发一个基于Struts2&amp ;;的Web应用程序。 Spring组件与公司制框架中的一组层库相结合。
这些librairies通过嵌入在提供的jar文件中的blahblah.xml文件公开了一组spring bean。
我需要用我自己的类替换通过这些bean声明公开的一些实现类,以便在提供的处理中添加额外的东西。
设计公司制造框架的人选择通过特定的Listener& amp;将blahblah.xml文件公开给Spring。定义此类configLocations的WebApplicationContext:
ConfigurableWebApplicationContext cwac = new XmlWebApplicationContext();
cwac.setConfigLocation("classpath*:<somePath>/blahblah.xml");
目前我看到只有一种方法可以实现这项工作(但也许我错了,请告诉我!):在假目录结构中从jar中复制blahblah.xml,修改实现副本中的一些bean类,然后将包含伪结构的文件夹放在webapp类路径中,以“遮蔽”原始文件。
这就是导致我能够在TOMCAT 5.5的类路径中强制执行此操作的问题,我在eclipse 3.3中用于开发。
虽然我在eclipse 3.3下的Tomcat服务器启动配置的Classpath选项卡中添加了包含伪结构的目录,但是注入的对象仍然是原始对象而不是我的。 我想我的文件夹放在TOMCAT运行类路径中的WEB-INF / lib jar之后,但我无法抓住它。
有什么想法吗?
答案 0 :(得分:1)
Tomcat的webapps类加载优先级大致如下:首先是bootstrap / system(JRE/lib
,然后是server.loader
),然后是webapp库(WEB-INF/classes
,然后是WEB-INF/lib
),然后是公共库(common.loader
,然后是Tomcat/lib
),最后是webapp共享库(shared.loader
)。
我首先将此文件添加到WEB-INF/classes
(在Eclipse中:只删除src
文件夹中的文件,它将自动考虑在内。)
请注意,如果没有一些繁重的自定义类加载器,则无法控制类加载优先级。您只需要知道默认的类加载顺序并明智地使用它。