@@ -104,6 +104,31 @@ void withNonPublicClass() {
104104 assertThat (enhancedClass .getClassLoader ()).isEqualTo (classLoader .getParent ());
105105 }
106106
107+ @ Test
108+ void withNonPublicConstructor () {
109+ ConfigurationClassEnhancer configurationClassEnhancer = new ConfigurationClassEnhancer ();
110+
111+ ClassLoader classLoader = new URLClassLoader (new URL [0 ], getClass ().getClassLoader ());
112+ Class <?> enhancedClass = configurationClassEnhancer .enhance (MyConfigWithNonPublicConstructor .class , classLoader );
113+ assertThat (MyConfigWithNonPublicConstructor .class ).isAssignableFrom (enhancedClass );
114+ assertThat (enhancedClass .getClassLoader ()).isEqualTo (classLoader .getParent ());
115+
116+ classLoader = new OverridingClassLoader (getClass ().getClassLoader ());
117+ enhancedClass = configurationClassEnhancer .enhance (MyConfigWithNonPublicConstructor .class , classLoader );
118+ assertThat (MyConfigWithNonPublicConstructor .class ).isAssignableFrom (enhancedClass );
119+ assertThat (enhancedClass .getClassLoader ()).isEqualTo (classLoader .getParent ());
120+
121+ classLoader = new CustomSmartClassLoader (getClass ().getClassLoader ());
122+ enhancedClass = configurationClassEnhancer .enhance (MyConfigWithNonPublicConstructor .class , classLoader );
123+ assertThat (MyConfigWithNonPublicConstructor .class ).isAssignableFrom (enhancedClass );
124+ assertThat (enhancedClass .getClassLoader ()).isEqualTo (classLoader .getParent ());
125+
126+ classLoader = new BasicSmartClassLoader (getClass ().getClassLoader ());
127+ enhancedClass = configurationClassEnhancer .enhance (MyConfigWithNonPublicConstructor .class , classLoader );
128+ assertThat (MyConfigWithNonPublicConstructor .class ).isAssignableFrom (enhancedClass );
129+ assertThat (enhancedClass .getClassLoader ()).isEqualTo (classLoader .getParent ());
130+ }
131+
107132 @ Test
108133 void withNonPublicMethod () {
109134 ConfigurationClassEnhancer configurationClassEnhancer = new ConfigurationClassEnhancer ();
@@ -160,6 +185,19 @@ public String myBean() {
160185 }
161186
162187
188+ @ Configuration
189+ public static class MyConfigWithNonPublicConstructor {
190+
191+ MyConfigWithNonPublicConstructor () {
192+ }
193+
194+ @ Bean
195+ public String myBean () {
196+ return "bean" ;
197+ }
198+ }
199+
200+
163201 @ Configuration
164202 public static class MyConfigWithNonPublicMethod {
165203
0 commit comments