Skip to content

Commit 362fe12

Browse files
committed
Polishing
1 parent 2af0323 commit 362fe12

File tree

4 files changed

+73
-69
lines changed

4 files changed

+73
-69
lines changed

spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,8 @@ private void loadBeanDefinitionsForBeanMethod(BeanMethod beanMethod) {
286286
}
287287

288288
if (logger.isTraceEnabled()) {
289-
logger.trace(String.format("Registering bean definition for @Bean method %s.%s()",
290-
configClass.getMetadata().getClassName(), beanName));
289+
logger.trace("Registering bean definition for @Bean method %s.%s()"
290+
.formatted(configClass.getMetadata().getClassName(), beanName));
291291
}
292292
this.registry.registerBeanDefinition(beanName, beanDefToRegister);
293293
}
@@ -344,9 +344,8 @@ else if (!this.registry.isBeanDefinitionOverridable(beanName)) {
344344
"@Bean definition illegally overridden by existing bean definition: " + existingBeanDef);
345345
}
346346
if (logger.isDebugEnabled()) {
347-
logger.debug(String.format("Skipping bean definition for %s: a definition for bean '%s' " +
348-
"already exists. This top-level bean definition is considered as an override.",
349-
beanMethod, beanName));
347+
logger.debug("Skipping bean definition for %s: a definition for bean '%s' already exists. " +
348+
"This top-level bean definition is considered as an override.".formatted(beanMethod, beanName));
350349
}
351350
return true;
352351
}

spring-context/src/main/java/org/springframework/context/annotation/ImportResource.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2015 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.
@@ -29,14 +29,15 @@
2929
* Indicates one or more resources containing bean definitions to import.
3030
*
3131
* <p>Like {@link Import @Import}, this annotation provides functionality similar to
32-
* the {@code <import/>} element in Spring XML. It is typically used when designing
33-
* {@link Configuration @Configuration} classes to be bootstrapped by an
34-
* {@link AnnotationConfigApplicationContext}, but where some XML functionality such
35-
* as namespaces is still necessary.
32+
* the {@code <import/>} element in Spring XML configuration. It is typically used
33+
* when designing {@link Configuration @Configuration} classes to be bootstrapped by
34+
* an {@link AnnotationConfigApplicationContext}, but where some XML functionality
35+
* such as namespaces is still necessary.
3636
*
37-
* <p>By default, arguments to the {@link #value} attribute will be processed using a
37+
* <p>By default, arguments to the {@link #locations() locations} or {@link #value() value}
38+
* attribute will be processed using a
3839
* {@link org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader GroovyBeanDefinitionReader}
39-
* if ending in {@code ".groovy"}; otherwise, an
40+
* for resource locations ending in {@code ".groovy"}; otherwise, an
4041
* {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader XmlBeanDefinitionReader}
4142
* will be used to parse Spring {@code <beans/>} XML files. Optionally, the {@link #reader}
4243
* attribute may be declared, allowing the user to choose a custom {@link BeanDefinitionReader}
@@ -77,12 +78,15 @@
7778

7879
/**
7980
* {@link BeanDefinitionReader} implementation to use when processing
80-
* resources specified via the {@link #value} attribute.
81+
* resources specified via the {@link #locations() locations} or
82+
* {@link #value() value} attribute.
8183
* <p>By default, the reader will be adapted to the resource path specified:
8284
* {@code ".groovy"} files will be processed with a
83-
* {@link org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader GroovyBeanDefinitionReader};
84-
* whereas, all other resources will be processed with an
85-
* {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader XmlBeanDefinitionReader}.
85+
* {@link org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader
86+
* GroovyBeanDefinitionReader}; whereas, all other resources will be processed
87+
* with an {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader
88+
* XmlBeanDefinitionReader}.
89+
* @see #locations
8690
* @see #value
8791
*/
8892
Class<? extends BeanDefinitionReader> reader() default BeanDefinitionReader.class;

spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportResourceTests.java

Lines changed: 54 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
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.
@@ -16,8 +16,6 @@
1616

1717
package org.springframework.context.annotation.configuration;
1818

19-
import java.util.Collections;
20-
2119
import org.aspectj.lang.annotation.Aspect;
2220
import org.aspectj.lang.annotation.Before;
2321
import org.junit.jupiter.api.Test;
@@ -30,13 +28,12 @@
3028
import org.springframework.context.annotation.Bean;
3129
import org.springframework.context.annotation.Configuration;
3230
import org.springframework.context.annotation.ImportResource;
33-
import org.springframework.core.env.MapPropertySource;
34-
import org.springframework.core.env.PropertySource;
31+
import org.springframework.core.testfixture.env.MockPropertySource;
3532

3633
import static org.assertj.core.api.Assertions.assertThat;
3734

3835
/**
39-
* Integration tests for {@link ImportResource} support.
36+
* Integration tests for {@link ImportResource @ImportResource} support.
4037
*
4138
* @author Chris Beams
4239
* @author Juergen Hoeller
@@ -45,81 +42,81 @@
4542
class ImportResourceTests {
4643

4744
@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();
45+
void importResource() {
46+
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ImportXmlConfig.class)) {
47+
assertThat(ctx.containsBean("javaDeclaredBean")).as("did not contain java-declared bean").isTrue();
48+
assertThat(ctx.containsBean("xmlDeclaredBean")).as("did not contain xml-declared bean").isTrue();
49+
TestBean tb = ctx.getBean("javaDeclaredBean", TestBean.class);
50+
assertThat(tb.getName()).isEqualTo("myName");
51+
}
5552
}
5653

5754
@Test
58-
void importXmlIsInheritedFromSuperclassDeclarations() {
59-
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(FirstLevelSubConfig.class);
60-
assertThat(ctx.containsBean("xmlDeclaredBean")).isTrue();
61-
ctx.close();
55+
void importResourceIsInheritedFromSuperclassDeclarations() {
56+
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(FirstLevelSubConfig.class)) {
57+
assertThat(ctx.containsBean("xmlDeclaredBean")).isTrue();
58+
}
6259
}
6360

6461
@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();
62+
void importResourceIsMergedFromSuperclassDeclarations() {
63+
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SecondLevelSubConfig.class)) {
64+
assertThat(ctx.containsBean("secondLevelXmlDeclaredBean")).as("failed to pick up second-level-declared XML bean").isTrue();
65+
assertThat(ctx.containsBean("xmlDeclaredBean")).as("failed to pick up parent-declared XML bean").isTrue();
66+
}
7067
}
7168

7269
@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();
70+
void importResourceWithNamespaceConfig() {
71+
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ImportXmlWithAopNamespaceConfig.class)) {
72+
Object bean = ctx.getBean("proxiedXmlBean");
73+
assertThat(AopUtils.isAopProxy(bean)).isTrue();
74+
}
7875
}
7976

8077
@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();
78+
void importResourceWithOtherConfigurationClass() {
79+
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ImportXmlWithConfigurationClass.class)) {
80+
assertThat(ctx.containsBean("javaDeclaredBean")).as("did not contain java-declared bean").isTrue();
81+
assertThat(ctx.containsBean("xmlDeclaredBean")).as("did not contain xml-declared bean").isTrue();
82+
TestBean tb = ctx.getBean("javaDeclaredBean", TestBean.class);
83+
assertThat(tb.getName()).isEqualTo("myName");
84+
}
8885
}
8986

9087
@Test
9188
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();
89+
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext()) {
90+
ctx.getEnvironment().getPropertySources().addFirst(new MockPropertySource("test").withProperty("test", "springframework"));
91+
ctx.register(ImportXmlConfig.class);
92+
ctx.refresh();
93+
assertThat(ctx.containsBean("xmlDeclaredBean")).as("did not contain xml-declared bean").isTrue();
94+
}
10095
}
10196

10297
@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();
98+
void importResourceWithAutowiredConfig() {
99+
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ImportXmlAutowiredConfig.class)) {
100+
String name = ctx.getBean("xmlBeanName", String.class);
101+
assertThat(name).isEqualTo("xml.declared");
102+
}
108103
}
109104

110105
@Test
111106
void importNonXmlResource() {
112-
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ImportNonXmlResourceConfig.class);
113-
assertThat(ctx.containsBean("propertiesDeclaredBean")).isTrue();
114-
ctx.close();
107+
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ImportNonXmlResourceConfig.class)) {
108+
assertThat(ctx.containsBean("propertiesDeclaredBean")).isTrue();
109+
}
115110
}
116111

117112

118113
@Configuration
119114
@ImportResource("classpath:org/springframework/context/annotation/configuration/ImportXmlConfig-context.xml")
120115
static class ImportXmlConfig {
116+
121117
@Value("${name}")
122118
private String name;
119+
123120
@Bean public TestBean javaDeclaredBean() {
124121
return new TestBean(this.name);
125122
}
@@ -146,6 +143,7 @@ static class ImportXmlWithAopNamespaceConfig {
146143

147144
@Aspect
148145
static class AnAspect {
146+
149147
@Before("execution(* org.springframework.beans.testfixture.beans.TestBean.*(..))")
150148
public void advice() { }
151149
}
@@ -158,16 +156,19 @@ static class ImportXmlWithConfigurationClass {
158156
@Configuration
159157
@ImportResource("classpath:org/springframework/context/annotation/configuration/ImportXmlConfig-context.xml")
160158
static class ImportXmlAutowiredConfig {
161-
@Autowired TestBean xmlDeclaredBean;
162159

163-
@Bean public String xmlBeanName() {
160+
@Autowired
161+
TestBean xmlDeclaredBean;
162+
163+
@Bean
164+
public String xmlBeanName() {
164165
return xmlDeclaredBean.getName();
165166
}
166167
}
167168

168169
@SuppressWarnings("deprecation")
169170
@Configuration
170-
@ImportResource(locations = "classpath:org/springframework/context/annotation/configuration/ImportNonXmlResourceConfig-context.properties",
171+
@ImportResource(locations = "org/springframework/context/annotation/configuration/ImportNonXmlResourceConfig.properties",
171172
reader = org.springframework.beans.factory.support.PropertiesBeanDefinitionReader.class)
172173
static class ImportNonXmlResourceConfig {
173174
}

0 commit comments

Comments
 (0)