diff --git a/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoader.java b/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoader.java index 1edc0641f575..3ec58716ae96 100644 --- a/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoader.java +++ b/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import java.net.URLClassLoader; import java.security.AccessController; import java.security.PrivilegedAction; +import java.security.ProtectionDomain; import java.util.Enumeration; import org.apache.commons.logging.Log; @@ -167,6 +168,11 @@ protected Class findClass(String name) throws ClassNotFoundException { }); } + @Override + public Class publicDefineClass(String name, byte[] b, ProtectionDomain protectionDomain) { + return defineClass(name, b, 0, b.length, protectionDomain); + } + private URL createFileUrl(String name, ClassLoaderFile file) { try { return new URL("reloaded", null, -1, "/" + name, new ClassLoaderFileURLStreamHandler(file)); diff --git a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoaderTests.java b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoaderTests.java index 06136002702a..63ec38d2bae1 100644 --- a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoaderTests.java +++ b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/classloader/RestartClassLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Enumeration; +import java.util.HashMap; import java.util.List; import java.util.jar.JarOutputStream; import java.util.zip.ZipEntry; @@ -34,6 +35,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.springframework.aop.framework.ProxyFactory; import org.springframework.boot.devtools.restart.classloader.ClassLoaderFile.Kind; import org.springframework.util.FileCopyUtils; import org.springframework.util.StreamUtils; @@ -200,6 +202,14 @@ void getAddedClass() throws Exception { assertThat(loaded.getClassLoader()).isEqualTo(this.reloadClassLoader); } + @Test + void proxyOnClassFromSystemClassLoaderDoesNotYieldWarning() { + ProxyFactory pf = new ProxyFactory(new HashMap<>()); + pf.setProxyTargetClass(true); + pf.getProxy(this.reloadClassLoader); + // Yield the warning but CapturedOutput does not give access to it + } + private String readString(InputStream in) throws IOException { return new String(FileCopyUtils.copyToByteArray(in)); }