Skip to content

Commit

Permalink
Use JdkDynamicAopProxy class loader instead of JDK bootstrap/platform…
Browse files Browse the repository at this point in the history
… loader

Closes gh-30115

(cherry picked from commit 7e905e3)
  • Loading branch information
jhoeller committed Mar 29, 2023
1 parent 7ad01a9 commit 0c80e5f
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2020 the original author or authors.
* Copyright 2002-2023 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.
Expand Down Expand Up @@ -123,6 +123,11 @@ public Object getProxy(@Nullable ClassLoader classLoader) {
if (logger.isTraceEnabled()) {
logger.trace("Creating JDK dynamic proxy: " + this.advised.getTargetSource());
}
if (classLoader == null || classLoader.getParent() == null) {

This comment has been minimized.

Copy link
@fantasy1713

fantasy1713 May 4, 2023

@jhoeller
This modification may cause compatibility issues. For example, in the OSGI framework, BundleDelegatingClassLoader has no parent classloader.
#30389

// JDK bootstrap loader or platform loader suggested ->
// use higher-level loader which can see Spring infrastructure classes
classLoader = getClass().getClassLoader();
}
return Proxy.newProxyInstance(classLoader, this.proxiedInterfaces, this);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2022 the original author or authors.
* Copyright 2002-2023 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.
Expand All @@ -16,7 +16,10 @@

package org.springframework.aop.framework;

import java.sql.SQLException;
import java.sql.Savepoint;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.accessibility.Accessible;
Expand Down Expand Up @@ -380,6 +383,40 @@ public void testInterceptorWithoutJoinpoint() {
assertThat(proxy.getName()).isEqualTo("tb");
}

@Test
public void testCharSequenceProxy() {
CharSequence target = "test";
ProxyFactory pf = new ProxyFactory(target);
ClassLoader cl = target.getClass().getClassLoader();
assertThat(((CharSequence) pf.getProxy(cl)).toString()).isEqualTo(target);
}

@Test
public void testDateProxy() {
Date target = new Date();
ProxyFactory pf = new ProxyFactory(target);
pf.setProxyTargetClass(true);
ClassLoader cl = target.getClass().getClassLoader();
assertThat(((Date) pf.getProxy(cl)).getTime()).isEqualTo(target.getTime());
}

@Test
public void testJdbcSavepointProxy() throws SQLException {
Savepoint target = new Savepoint() {
@Override
public int getSavepointId() throws SQLException {
return 1;
}
@Override
public String getSavepointName() throws SQLException {
return "sp";
}
};
ProxyFactory pf = new ProxyFactory(target);
ClassLoader cl = Savepoint.class.getClassLoader();
assertThat(((Savepoint) pf.getProxy(cl)).getSavepointName()).isEqualTo("sp");
}


@Order(2)
public static class A implements Runnable {
Expand All @@ -391,7 +428,7 @@ public void run() {


@Order(1)
public static class B implements Runnable{
public static class B implements Runnable {

@Override
public void run() {
Expand Down

0 comments on commit 0c80e5f

Please sign in to comment.