StandardReflectionParameterNameDiscoverer如何编译为jdk版本50?

时间:2018-03-08 11:37:45

标签: 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

1 个答案:

答案 0 :(得分:1)

伟大的工程是答案

Spring 4.x 在不破坏其代码与 Java 6 Java的二进制兼容性的情况下引入了 Java 8 兼容性7 即可。这意味着该框架是使用 Java 8 javac编译的,但使用选项-source 1.6 -target 1.6

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

org.springframework.core.StandardReflectionParameterNameDiscoverer的源代码中,您可以注意到注释@UsesJava8的注释,该注释仅在 Java 8或更高版本运行为 Java 6 。

要查看此操作,请注意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