Spring 如何使用 Java 8 类,但又在 Java 7 上运行?

2024-01-12

我最近下载了 Spring 框架内的 Spring MVC(版本 4.0.2.RELEASE)模块的源代码。我的目的是针对模块的实际源代码而不是实际的源代码运行.jar文件。 (说来话长,仅用于测试目的)。

下载源代码后,我删除了jar我的项目中的文件,编译并部署到服务器。当我点击调度程序 servlet 处理的 URL 之一时,出现了错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0': Invocation of init method failed; nested exception is java.lang.Error: Unresolved compilation problems: 
    The import java.time cannot be resolved
    The method toZoneId() is undefined for the type TimeZone
    ZoneId cannot be resolved

经过一些研究和深入研究源代码,我意识到错误中提到的类是 JDK/JRE 1.8 的一部分。移除之前.jar文件我的项目在 JDK/JRE 1.7 上运行没有问题。

我的问题是 Spring 如何包含 JDK 1.8 中的类,但仍然能够在 JDK/JRE 1.7 下运行?为什么使用Spring的时候不抛出异常.jar文件,但当我提供源代码时抛出它(并且 jar 文件丢失)?

完整的堆栈跟踪

Mar 26, 2014 7:27:18 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet dispatcher
java.lang.Error: Unresolved compilation problems: 
    The import java.time cannot be resolved
    The method toZoneId() is undefined for the type TimeZone
    ZoneId cannot be resolved

    at org.springframework.web.servlet.mvc.method.annotation.ServletRequestMethodArgumentResolver.<init>(ServletRequestMethodArgumentResolver.java:23)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.getDefaultArgumentResolvers(RequestMappingHandlerAdapter.java:522)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.afterPropertiesSet(RequestMappingHandlerAdapter.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1274)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1186)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:858)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

标题问题的答案是:Spring 使用 Java 8 构建,但与 Java 7(和 6)兼容。

ServletRequestMethodArgumentResolver确实进口java.time.ZoneId,但它仅引用嵌套类中的类,除非 Java 8 位于类路径上,否则不会实例化该类。 Spring 源代码中有很多这样的例子(一直如此,例如自从它开始支持 Java 5 以来)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 如何使用 Java 8 类,但又在 Java 7 上运行? 的相关文章

随机推荐

  • 小图像数据集的数据增强技术?

    目前我正在训练类似于的小型徽标数据集Flickrlogos 32 http www multimedia computing de flickrlogos 与深度 CNN 为了训练更大的网络 我需要更多的数据集 因此使用增强 我现在做的最好
  • 在 Python 中使用切片更改多个 Numpy 数组元素

    说我有numpy array arr 1 np arange 10 返回 array 0 1 2 3 4 5 6 7 8 9 我该如何改变multiple使用切片将元素设置为某个值 例如 将从第一个元素开始每五个元素出现的第零个 第一个和第
  • 如何找到元素具有哪些 onChange 函数?

    我有一个加载大量 JavaScript 文件的页面 在文件中的某个位置 onchange 处理程序被添加到输入字段 A 当一个值添加到输入字段 A 时 输入字段 B 会自动填充另一个值 取决于 A 的值 数量庞大的文件和输入字段的名称 co
  • 资源泄漏:“in”永远不会关闭

    为什么 Eclipse 在下面的代码中给我警告 资源泄漏 in 永远不会关闭 public void readShapeData Scanner in new Scanner System in System out println Ent
  • 编写 python3 zip 的另一种方法是什么[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我一直在编写一个代码 该代码读取文件
  • 执行并发 SSH 命令?

    我想使用以下命令编写一个 PHP 脚本ssh2 http www php net manual en ref ssh2 php函数将一些代码同时部署到多个服务器并运行一些任务 这在 PHP 中可行 还是我必须等待每个请求完成 我可以使用不同
  • 使用 HTML Agility Pack 替换 HTML div InnerText 标记

    我正在使用 HTML Agility Pack 来操作和编辑 HTML 文档 我想更改该字段中的文本 如下所示 div b Some text here b br div 我希望将此 div 中的文本更新为 div b Some other
  • 如何安装Roslyn(用于源代码修改)?

    我不想安装编译器 据我所知它已经安装了 我使用的是 Visual Studio 2015 我不想要源代码 我只想能够做一些简单的代码更改 例如这个问题 https stackoverflow com questions 23227644 h
  • 从 Java 类型移回 MATLAB 类型

    我有一个 Java 数组 my array在我的 MATLAB 工作区中 我想将其转换回 MATLAB 数组 在下面的示例中 whos my array Name Size Class my array 20000x1 java lang
  • 如何设置可执行 Spring Boot jar 文件的 JVM 属性?

    作为后续问题如何构建 systemd 可以直接作为服务执行的 Spring Boot jarfile https stackoverflow com q 40870317 107158 如何设置可执行 Spring Boot jar 文件的
  • 在C中获取变量名称的编程方法?

    我正在开发一个工具来转储变量中的数据 我需要转储变量名称以及值 我的解决方案 将变量名称存储为字符串 并打印 变量名称 后跟其值 有没有任何编程方法可以知道变量名称 你可以尝试这样的事情 define DUMP varname fprint
  • JavaScript 播放上传的音频

    如何使音频上传后可以播放 我使用了这段代码 但它不起作用
  • 使用 spa 中的 azure b2c 对 webapi 进行身份验证(Angular 和 adal.js)

    我正在尝试验证我的 SPA angular js 和 adal js 类似于https github com Azure Samples active directory angularjs singlepageapp dotnet web
  • Visual Studio 安装程序项目中的其他设置

    我正在尝试为我的项目创建一个安装 我正在使用 MS Access 数据库 为了使其正常工作 需要 Access 数据库引擎 如果我下载那个引擎https www microsoft com en us download details as
  • ADO SQL 类型将 Float 转换为 String (Excel)

    如何使用 ADO 中的 CAST 将浮点值转换为字符串 I tried SELECT CAST Field AS VARCHAR 20 FROM and SELECT CAST Field AS STRING FROM 并且总是收到 OLE
  • 通过 .htaccess 在服务器上存储常量变量

    我想存储INDEX URL恒定最简单的方法 有一个开发者网站和一个普通网站 如果开发者网站有任何更改 我想复制整个文件 但这个常量在两个站点上不同 我做了这个测试 putenv TEST TEST var dump getenv TEST
  • ClassNotFoundException axiom-api-1.2.7.jar

    我在我的java项目中遇到这个异常 Caused by java lang ClassNotFoundException org apache axiom om OMDataSource at java net URLClassLoader
  • 如何在ExtJs选项卡上实现accesskey?

    我在我们的产品中实现了可滚动的 extjs 选项卡面板 但我还需要支持 accesskey 功能 例如 按 Alt P 键将打开选项卡之一 有谁有实施这个的经验吗 其核心是创建一个键盘映射来识别您正在按下组合键 一旦检测到这种情况 您就可以
  • 如何向 MUI X DataGrid 中的每一行添加按钮

    我无法在 MUI X 的每一行中添加按钮DataGrid 我有一个 MUI XDataGrid我这样渲染
  • Spring 如何使用 Java 8 类,但又在 Java 7 上运行?

    我最近下载了 Spring 框架内的 Spring MVC 版本 4 0 2 RELEASE 模块的源代码 我的目的是针对模块的实际源代码而不是实际的源代码运行 jar文件 说来话长 仅用于测试目的 下载源代码后 我删除了jar我的项目中的