31
31
32
32
import org .springframework .lang .Nullable ;
33
33
import org .springframework .util .Assert ;
34
+ import org .springframework .util .ClassUtils ;
34
35
import org .springframework .util .ReflectionUtils ;
35
36
36
37
/**
@@ -91,15 +92,7 @@ protected Class<?> findClass(String name) throws ClassNotFoundException {
91
92
return super .findClass (name );
92
93
}
93
94
94
- @ Nullable
95
- private byte [] findClassBytes (String name ) {
96
- ClassFile classFile = this .classFiles .get (name );
97
- if (classFile != null ) {
98
- return classFile .getContent ();
99
- }
100
- DynamicClassFileObject dynamicClassFile = this .dynamicClassFiles .get (name );
101
- return (dynamicClassFile != null ) ? dynamicClassFile .getBytes () : null ;
102
- }
95
+
103
96
104
97
private Class <?> defineClass (String name , byte [] bytes ) {
105
98
if (this .defineClassMethod != null ) {
@@ -109,7 +102,6 @@ private Class<?> defineClass(String name, byte[] bytes) {
109
102
return defineClass (name , bytes , 0 , bytes .length );
110
103
}
111
104
112
-
113
105
@ Override
114
106
protected Enumeration <URL > findResources (String name ) throws IOException {
115
107
URL resource = findResource (name );
@@ -122,6 +114,14 @@ protected Enumeration<URL> findResources(String name) throws IOException {
122
114
@ Override
123
115
@ Nullable
124
116
protected URL findResource (String name ) {
117
+ if (name .endsWith (ClassUtils .CLASS_FILE_SUFFIX )) {
118
+ String className = ClassUtils .convertResourcePathToClassName (name .substring (0 ,
119
+ name .length () - ClassUtils .CLASS_FILE_SUFFIX .length ()));
120
+ byte [] classBytes = findClassBytes (className );
121
+ if (classBytes != null ) {
122
+ return createResourceUrl (name , () -> classBytes );
123
+ }
124
+ }
125
125
ResourceFile resourceFile = this .resourceFiles .get (name );
126
126
if (resourceFile != null ) {
127
127
return createResourceUrl (resourceFile .getPath (), resourceFile ::getBytes );
@@ -133,6 +133,16 @@ protected URL findResource(String name) {
133
133
return super .findResource (name );
134
134
}
135
135
136
+ @ Nullable
137
+ private byte [] findClassBytes (String name ) {
138
+ ClassFile classFile = this .classFiles .get (name );
139
+ if (classFile != null ) {
140
+ return classFile .getContent ();
141
+ }
142
+ DynamicClassFileObject dynamicClassFile = this .dynamicClassFiles .get (name );
143
+ return (dynamicClassFile != null ) ? dynamicClassFile .getBytes () : null ;
144
+ }
145
+
136
146
private URL createResourceUrl (String name , Supplier <byte []> bytesSupplier ) {
137
147
try {
138
148
return new URL (null , "resource:///" + name ,
0 commit comments