java - StandardReflectionParameterNameDiscoverer 如何编译到 jdk 版本 50?

标签 java spring spring-mvc jvm

我看到 org.springframework.core.StandardReflectionParameterNameDiscoverer 的字节码,它的版本是 50。 enter image description here

但它使用了 jdk 1.8 的方法:java.lang.reflect.Parameter。它是如何编译的? enter image description here

最佳答案

伟大的工程就是答案

Spring 4.x 引入了 Java 8 兼容性,而没有破坏其代码与 Java 6Java 的二进制兼容性7.这意味着该框架是使用 Java 8 javac 编译的,但带有选项 -source 1.6 -target 1.6

这意味着 Spring 4.x 不使用任何 Java 8 语言功能(如 lambda),但可以通过谨慎使用 Java 8 SDK 中引入的类来使用。

org.springframework.core.StandardReflectionParameterNameDiscoverer 的源代码中,您可以注意到注释 @UsesJava8,它注释了仅在 Java 8 时使用的类或更高版本 运行为 Java 6 编译的代码。

要查看这是一个 Action ,请注意使用该类的 Spring 框架代码,例如 DefaultNameParameterDiscoverer :

private static final boolean standardReflectionAvailable =
        (JdkVersion.getMajorJavaVersion() >= JdkVersion.JAVA_18);


public DefaultParameterNameDiscoverer() {
    if (standardReflectionAvailable) {
        addDiscoverer(new StandardReflectionParameterNameDiscoverer());
    }
    addDiscoverer(new LocalVariableTableParameterNameDiscoverer());
}

在 Spring 4.x 代码库中使用了一些 Java 8 API,例如 OptionalStream

关于java - StandardReflectionParameterNameDiscoverer 如何编译到 jdk 版本 50?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49172170/

相关文章:

java - JMeter + Git + Jenkins

java - 使用 IMAP 在浏览器中显示 Lotus Notes 邮件的内容

java - Spring 启动和 tomcat

java - AbstractUserTypeHibernateIntegrator 用户类型的 Hibernate 空指针

javascript - 无法使用 Java 和 Angular js 在一个请求中上传多张图像

java - spring hibernate mysql无法获取数据

Spring Social Twitter 通过推文 id 搜索?

java - Spring/MyBatis 事务回滚

java - Spring MVC - 来自过滤器的内容类型感知响应

java - JTable 标题中的复选框与 Nimbus L&F 呈现不同