Browse Source

Refer to the "Java Module System" instead of "Jigsaw"

pull/33425/head
Sam Brannen 1 year ago
parent
commit
cac623b3f4
  1. 4
      framework-docs/modules/ROOT/pages/core/beans/classpath-scanning.adoc
  2. 4
      framework-docs/modules/ROOT/pages/core/resources.adoc
  3. 12
      framework-docs/modules/ROOT/pages/overview.adoc
  4. 4
      spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java
  5. 26
      spring-core/src/main/java/org/springframework/util/ClassUtils.java

4
framework-docs/modules/ROOT/pages/core/beans/classpath-scanning.adoc

@ -317,8 +317,8 @@ exposed based on security policies in some environments -- for example, standalo @@ -317,8 +317,8 @@ exposed based on security policies in some environments -- for example, standalo
JDK 1.7.0_45 and higher (which requires 'Trusted-Library' setup in your manifests -- see
{stackoverflow-questions}/19394570/java-jre-7u45-breaks-classloader-getresources).
On JDK 9's module path (Jigsaw), Spring's classpath scanning generally works as expected.
However, make sure that your component classes are exported in your `module-info`
On the module path (Java Module System), Spring's classpath scanning generally works as
expected. However, make sure that your component classes are exported in your `module-info`
descriptors. If you expect Spring to invoke non-public members of your classes, make
sure that they are 'opened' (that is, that they use an `opens` declaration instead of an
`exports` declaration in your `module-info` descriptor).

4
framework-docs/modules/ROOT/pages/core/resources.adoc

@ -905,8 +905,8 @@ policies in some environments -- for example, stand-alone applications on JDK 1. @@ -905,8 +905,8 @@ policies in some environments -- for example, stand-alone applications on JDK 1.
and higher (which requires 'Trusted-Library' to be set up in your manifests. See
{stackoverflow-questions}/19394570/java-jre-7u45-breaks-classloader-getresources).
On JDK 9's module path (Jigsaw), Spring's classpath scanning generally works as expected.
Putting resources into a dedicated directory is highly recommendable here as well,
On the module path (Java Module System), Spring's classpath scanning generally works as
expected. Putting resources into a dedicated directory is highly recommendable here as well,
avoiding the aforementioned portability problems with searching the jar file root level.
====

12
framework-docs/modules/ROOT/pages/overview.adoc

@ -37,12 +37,12 @@ support for different application architectures, including messaging, transactio @@ -37,12 +37,12 @@ support for different application architectures, including messaging, transactio
persistence, and web. It also includes the Servlet-based Spring MVC web framework and, in
parallel, the Spring WebFlux reactive web framework.
A note about modules: Spring's framework jars allow for deployment to JDK 9's module path
("Jigsaw"). For use in Jigsaw-enabled applications, the Spring Framework 5 jars come with
"Automatic-Module-Name" manifest entries which define stable language-level module names
("spring.core", "spring.context", etc.) independent from jar artifact names (the jars follow
the same naming pattern with "-" instead of ".", e.g. "spring-core" and "spring-context").
Of course, Spring's framework jars keep working fine on the classpath on both JDK 8 and 9+.
A note about modules: Spring Framework's jars allow for deployment to the module path (Java
Module System). For use in module-enabled applications, the Spring Framework jars come with
`Automatic-Module-Name` manifest entries which define stable language-level module names
(`spring.core`, `spring.context`, etc.) independent from jar artifact names. The jars follow
the same naming pattern with `-` instead of `.` – for example, `spring-core` and `spring-context`.
Of course, Spring Framework's jars also work fine on the classpath.

4
spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java

@ -243,12 +243,12 @@ public class ResourceBundleMessageSource extends AbstractResourceBasedMessageSou @@ -243,12 +243,12 @@ public class ResourceBundleMessageSource extends AbstractResourceBasedMessageSou
return ResourceBundle.getBundle(basename, locale, classLoader, control);
}
catch (UnsupportedOperationException ex) {
// Probably in a Jigsaw environment on JDK 9+
// Probably in a Java Module System environment on JDK 9+
this.control = null;
String encoding = getDefaultEncoding();
if (encoding != null && logger.isInfoEnabled()) {
logger.info("ResourceBundleMessageSource is configured to read resources with encoding '" +
encoding + "' but ResourceBundle.Control not supported in current system environment: " +
encoding + "' but ResourceBundle.Control is not supported in current system environment: " +
ex.getMessage() + " - falling back to plain ResourceBundle.getBundle retrieval with the " +
"platform default encoding. Consider setting the 'defaultEncoding' property to 'null' " +
"for participating in the platform default and therefore avoiding this log message.");

26
spring-core/src/main/java/org/springframework/util/ClassUtils.java

@ -332,10 +332,10 @@ public abstract class ClassUtils { @@ -332,10 +332,10 @@ public abstract class ClassUtils {
* @return a class instance for the supplied name
* @throws IllegalArgumentException if the class name was not resolvable
* (that is, the class could not be found or the class file could not be loaded)
* @throws IllegalStateException if the corresponding class is resolvable but
* there was a readability mismatch in the inheritance hierarchy of the class
* (typically a missing dependency declaration in a Jigsaw module definition
* for a superclass or interface implemented by the class to be loaded here)
* @throws IllegalStateException if the corresponding class is resolvable but there
* was a readability mismatch in the inheritance hierarchy of the class (typically a
* missing dependency declaration in a Java Module System module definition for a
* superclass or interface implemented by the class to be loaded here)
* @see #forName(String, ClassLoader)
*/
public static Class<?> resolveClassName(String className, @Nullable ClassLoader classLoader)
@ -365,10 +365,10 @@ public abstract class ClassUtils { @@ -365,10 +365,10 @@ public abstract class ClassUtils {
* (can be {@code null} which indicates the default class loader)
* @return whether the specified class is present (including all of its
* superclasses and interfaces)
* @throws IllegalStateException if the corresponding class is resolvable but
* there was a readability mismatch in the inheritance hierarchy of the class
* (typically a missing dependency declaration in a Jigsaw module definition
* for a superclass or interface implemented by the class to be checked here)
* @throws IllegalStateException if the corresponding class is resolvable but there
* was a readability mismatch in the inheritance hierarchy of the class (typically a
* missing dependency declaration in a Java Module System module definition for a
* superclass or interface implemented by the class to be checked here)
*/
public static boolean isPresent(String className, @Nullable ClassLoader classLoader) {
try {
@ -1388,8 +1388,9 @@ public abstract class ClassUtils { @@ -1388,8 +1388,9 @@ public abstract class ClassUtils {
/**
* Determine a corresponding interface method for the given method handle, if possible.
* <p>This is particularly useful for arriving at a public exported type on Jigsaw
* which can be reflectively invoked without an illegal access warning.
* <p>This is particularly useful for arriving at a public exported type on the Java
* Module System which allows the method to be invoked via reflection without an illegal
* access warning.
* @param method the method to be invoked, potentially from an implementation class
* @return the corresponding interface method, or the original method if none found
* @since 5.1
@ -1402,8 +1403,9 @@ public abstract class ClassUtils { @@ -1402,8 +1403,9 @@ public abstract class ClassUtils {
/**
* Determine a corresponding interface method for the given method handle, if possible.
* <p>This is particularly useful for arriving at a public exported type on Jigsaw
* which can be reflectively invoked without an illegal access warning.
* <p>This is particularly useful for arriving at a public exported type on the Java
* Module System which allows the method to be invoked via reflection without an illegal
* access warning.
* @param method the method to be invoked, potentially from an implementation class
* @param targetClass the target class to check for declared interfaces
* @return the corresponding interface method, or the original method if none found

Loading…
Cancel
Save