【发布时间】:2015-02-21 17:32:44
【问题描述】:
我有一个 Spring Web 应用程序,它接收一个外部 jar,其中包含一些在 packakge com.x.y.controller 中的注释控制器。
我在 spring-servlet.xml 的组件扫描路径中包含了 com.x.y.controller 包
<context:component-scan base-package="com.x.y.controller" />.
但是当我将应用程序部署到本地 tomcat 服务器时,我的外部 jar 中的那些控制器 bean 不会被创建。
但是,当我在构建应用程序时将 jar 提取到我的类路径中时(意味着将我的包完全扩展到我的 Web 应用程序类路径中),一切似乎都运行良好。这对我来说似乎很奇怪,因为我们在外部 jar 中也有一些带有 @component 注释的服务类。这些类似乎工作正常。
有谁知道这是否是春季的预期行为?还是我缺少一些配置让 spring 找到那些控制器?
目前在开发过程中,如果我更改了一个类,即使该类在外部 jar 中,更改也会反映到 tomcat 而不重建。如果我需要提取 jar 以使这些控制器工作,即使我重新启动服务器,tomcat 似乎也不会对这些控制器进行更改。需要重建以再次提取 jar 以使任何更改生效。这对发展来说将是非常痛苦的。我对春天比较陌生。如果我必须这样做,有人会看到解决方案吗?
【问题讨论】:
-
你找到解决这个问题的方法了吗?如果是,请写一个答案。我也有同样的问题。
-
我已经解决了这个问题。我添加了 ${CATALINA_BASE}/conf/Catalina/localhost/${APP_NAME}.xml 并在此文件中添加了应用程序类加载器。在 tomcat 8+ 中,这是 JarResources 属性,在 tomcat 小于 8 版本中,它是 Loader 属性。这是我的要点和额外的解释gist.github.com/durdyev/542dffb60beb30f5c6ce293418555ef7
标签: java spring spring-mvc