11/*
2- * Copyright 2002-2024 the original author or authors.
2+ * Copyright 2002-2025 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
1616
1717package org .springframework .context .annotation .configuration ;
1818
19- import java .util .Collections ;
20-
2119import org .aspectj .lang .annotation .Aspect ;
2220import org .aspectj .lang .annotation .Before ;
2321import org .junit .jupiter .api .Test ;
2422
2523import org .springframework .aop .support .AopUtils ;
2624import org .springframework .beans .factory .annotation .Autowired ;
2725import org .springframework .beans .factory .annotation .Value ;
26+ import org .springframework .beans .factory .support .BeanDefinitionRegistry ;
2827import org .springframework .beans .testfixture .beans .TestBean ;
2928import org .springframework .context .annotation .AnnotationConfigApplicationContext ;
3029import org .springframework .context .annotation .Bean ;
3130import org .springframework .context .annotation .Configuration ;
3231import org .springframework .context .annotation .ImportResource ;
33- import org .springframework .core .env .MapPropertySource ;
34- import org .springframework .core .env .PropertySource ;
32+ import org .springframework .core .testfixture .env .MockPropertySource ;
3533
3634import static org .assertj .core .api .Assertions .assertThat ;
3735
3836/**
39- * Integration tests for {@link ImportResource} support.
37+ * Integration tests for {@link ImportResource @ImportResource } support.
4038 *
4139 * @author Chris Beams
4240 * @author Juergen Hoeller
4543class ImportResourceTests {
4644
4745 @ Test
48- void importXml () {
49- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportXmlConfig .class );
50- assertThat (ctx .containsBean ("javaDeclaredBean" )).as ("did not contain java-declared bean" ).isTrue ();
51- assertThat (ctx .containsBean ("xmlDeclaredBean" )).as ("did not contain xml-declared bean" ).isTrue ();
52- TestBean tb = ctx .getBean ("javaDeclaredBean" , TestBean .class );
53- assertThat (tb .getName ()).isEqualTo ("myName" );
54- ctx . close ();
46+ void importResource () {
47+ try ( AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportXmlConfig .class )) {
48+ assertThat (ctx .containsBean ("javaDeclaredBean" )).as ("did not contain java-declared bean" ).isTrue ();
49+ assertThat (ctx .containsBean ("xmlDeclaredBean" )).as ("did not contain xml-declared bean" ).isTrue ();
50+ TestBean tb = ctx .getBean ("javaDeclaredBean" , TestBean .class );
51+ assertThat (tb .getName ()).isEqualTo ("myName" );
52+ }
5553 }
5654
5755 @ Test
58- void importXmlIsInheritedFromSuperclassDeclarations () {
59- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (FirstLevelSubConfig .class );
60- assertThat (ctx .containsBean ("xmlDeclaredBean" )).isTrue ();
61- ctx . close ();
56+ void importResourceIsInheritedFromSuperclassDeclarations () {
57+ try ( AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (FirstLevelSubConfig .class )) {
58+ assertThat (ctx .containsBean ("xmlDeclaredBean" )).isTrue ();
59+ }
6260 }
6361
6462 @ Test
65- void importXmlIsMergedFromSuperclassDeclarations () {
66- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (SecondLevelSubConfig .class );
67- assertThat (ctx .containsBean ("secondLevelXmlDeclaredBean" )).as ("failed to pick up second-level-declared XML bean" ).isTrue ();
68- assertThat (ctx .containsBean ("xmlDeclaredBean" )).as ("failed to pick up parent-declared XML bean" ).isTrue ();
69- ctx . close ();
63+ void importResourceIsMergedFromSuperclassDeclarations () {
64+ try ( AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (SecondLevelSubConfig .class )) {
65+ assertThat (ctx .containsBean ("secondLevelXmlDeclaredBean" )).as ("failed to pick up second-level-declared XML bean" ).isTrue ();
66+ assertThat (ctx .containsBean ("xmlDeclaredBean" )).as ("failed to pick up parent-declared XML bean" ).isTrue ();
67+ }
7068 }
7169
7270 @ Test
73- void importXmlWithNamespaceConfig () {
74- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportXmlWithAopNamespaceConfig .class );
75- Object bean = ctx .getBean ("proxiedXmlBean" );
76- assertThat (AopUtils .isAopProxy (bean )).isTrue ();
77- ctx . close ();
71+ void importResourceWithNamespaceConfig () {
72+ try ( AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportXmlWithAopNamespaceConfig .class )) {
73+ Object bean = ctx .getBean ("proxiedXmlBean" );
74+ assertThat (AopUtils .isAopProxy (bean )).isTrue ();
75+ }
7876 }
7977
8078 @ Test
81- void importXmlWithOtherConfigurationClass () {
82- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportXmlWithConfigurationClass .class );
83- assertThat (ctx .containsBean ("javaDeclaredBean" )).as ("did not contain java-declared bean" ).isTrue ();
84- assertThat (ctx .containsBean ("xmlDeclaredBean" )).as ("did not contain xml-declared bean" ).isTrue ();
85- TestBean tb = ctx .getBean ("javaDeclaredBean" , TestBean .class );
86- assertThat (tb .getName ()).isEqualTo ("myName" );
87- ctx . close ();
79+ void importResourceWithOtherConfigurationClass () {
80+ try ( AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportXmlWithConfigurationClass .class )) {
81+ assertThat (ctx .containsBean ("javaDeclaredBean" )).as ("did not contain java-declared bean" ).isTrue ();
82+ assertThat (ctx .containsBean ("xmlDeclaredBean" )).as ("did not contain xml-declared bean" ).isTrue ();
83+ TestBean tb = ctx .getBean ("javaDeclaredBean" , TestBean .class );
84+ assertThat (tb .getName ()).isEqualTo ("myName" );
85+ }
8886 }
8987
9088 @ Test
9189 void importWithPlaceholder () {
92- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext ();
93- PropertySource <?> propertySource = new MapPropertySource ("test" ,
94- Collections .<String , Object > singletonMap ("test" , "springframework" ));
95- ctx .getEnvironment ().getPropertySources ().addFirst (propertySource );
96- ctx .register (ImportXmlConfig .class );
97- ctx .refresh ();
98- assertThat (ctx .containsBean ("xmlDeclaredBean" )).as ("did not contain xml-declared bean" ).isTrue ();
99- ctx .close ();
90+ try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext ()) {
91+ ctx .getEnvironment ().getPropertySources ().addFirst (new MockPropertySource ("test" ).withProperty ("test" , "springframework" ));
92+ ctx .register (ImportXmlConfig .class );
93+ ctx .refresh ();
94+ assertThat (ctx .containsBean ("xmlDeclaredBean" )).as ("did not contain xml-declared bean" ).isTrue ();
95+ }
10096 }
10197
10298 @ Test
103- void importXmlWithAutowiredConfig () {
104- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportXmlAutowiredConfig .class );
105- String name = ctx .getBean ("xmlBeanName" , String .class );
106- assertThat (name ).isEqualTo ("xml.declared" );
107- ctx . close ();
99+ void importResourceWithAutowiredConfig () {
100+ try ( AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportXmlAutowiredConfig .class )) {
101+ String name = ctx .getBean ("xmlBeanName" , String .class );
102+ assertThat (name ).isEqualTo ("xml.declared" );
103+ }
108104 }
109105
110106 @ Test
111107 void importNonXmlResource () {
112- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportNonXmlResourceConfig .class );
113- assertThat (ctx .containsBean ("propertiesDeclaredBean" )).isTrue ();
114- ctx .close ();
108+ try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportNonXmlResourceConfig .class )) {
109+ assertThat (ctx .containsBean ("propertiesDeclaredBean" )).isTrue ();
110+ }
111+ }
112+
113+ @ Test
114+ void importResourceWithPrivateReader () {
115+ try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ImportWithPrivateReaderConfig .class )) {
116+ assertThat (ctx .containsBean ("propertiesDeclaredBean" )).isTrue ();
117+ }
115118 }
116119
117120
118121 @ Configuration
119122 @ ImportResource ("classpath:org/springframework/context/annotation/configuration/ImportXmlConfig-context.xml" )
120123 static class ImportXmlConfig {
124+
121125 @ Value ("${name}" )
122126 private String name ;
127+
123128 @ Bean public TestBean javaDeclaredBean () {
124129 return new TestBean (this .name );
125130 }
@@ -146,6 +151,7 @@ static class ImportXmlWithAopNamespaceConfig {
146151
147152 @ Aspect
148153 static class AnAspect {
154+
149155 @ Before ("execution(* org.springframework.beans.testfixture.beans.TestBean.*(..))" )
150156 public void advice () { }
151157 }
@@ -158,18 +164,37 @@ static class ImportXmlWithConfigurationClass {
158164 @ Configuration
159165 @ ImportResource ("classpath:org/springframework/context/annotation/configuration/ImportXmlConfig-context.xml" )
160166 static class ImportXmlAutowiredConfig {
161- @ Autowired TestBean xmlDeclaredBean ;
162167
163- @ Bean public String xmlBeanName () {
168+ @ Autowired
169+ TestBean xmlDeclaredBean ;
170+
171+ @ Bean
172+ public String xmlBeanName () {
164173 return xmlDeclaredBean .getName ();
165174 }
166175 }
167176
168177 @ SuppressWarnings ("deprecation" )
169178 @ Configuration
170- @ ImportResource (locations = "classpath: org/springframework/context/annotation/configuration/ImportNonXmlResourceConfig-context .properties" ,
179+ @ ImportResource (locations = "org/springframework/context/annotation/configuration/ImportNonXmlResourceConfig.properties" ,
171180 reader = org .springframework .beans .factory .support .PropertiesBeanDefinitionReader .class )
172181 static class ImportNonXmlResourceConfig {
173182 }
174183
184+ @ SuppressWarnings ("deprecation" )
185+ @ Configuration
186+ @ ImportResource (locations = "org/springframework/context/annotation/configuration/ImportNonXmlResourceConfig.properties" ,
187+ reader = PrivatePropertiesBeanDefinitionReader .class )
188+ static class ImportWithPrivateReaderConfig {
189+ }
190+
191+ @ SuppressWarnings ("deprecation" )
192+ private static class PrivatePropertiesBeanDefinitionReader
193+ extends org .springframework .beans .factory .support .PropertiesBeanDefinitionReader {
194+
195+ PrivatePropertiesBeanDefinitionReader (BeanDefinitionRegistry registry ) {
196+ super (registry );
197+ }
198+ }
199+
175200}
0 commit comments