32
32
import org .springframework .beans .factory .xml .XmlBeanDefinitionReader ;
33
33
import org .springframework .context .annotation .AnnotatedBeanDefinitionReader ;
34
34
import org .springframework .context .annotation .ClassPathBeanDefinitionScanner ;
35
+ import org .springframework .core .SpringProperties ;
35
36
import org .springframework .core .env .ConfigurableEnvironment ;
36
37
import org .springframework .core .io .ClassPathResource ;
37
38
import org .springframework .core .io .Resource ;
53
54
*
54
55
* @author Phillip Webb
55
56
* @author Vladislav Kisel
57
+ * @author Sebastien Deleuze
56
58
* @see #setBeanNameGenerator(BeanNameGenerator)
57
59
*/
58
60
class BeanDefinitionLoader {
59
61
62
+ /**
63
+ * Boolean flag controlled by a {@code spring.xml.ignore} system property that
64
+ * instructs Spring to ignore XML, i.e. to not initialize the XML-related
65
+ * infrastructure.
66
+ * <p>
67
+ * By default XML support is enabled.
68
+ */
69
+ private static final boolean IS_XML_ENABLED = !SpringProperties .getFlag ("spring.xml.ignore" );
70
+
60
71
private final Object [] sources ;
61
72
62
73
private final AnnotatedBeanDefinitionReader annotatedReader ;
63
74
64
75
private final XmlBeanDefinitionReader xmlReader ;
65
76
66
- private BeanDefinitionReader groovyReader ;
77
+ private final BeanDefinitionReader groovyReader ;
67
78
68
79
private final ClassPathBeanDefinitionScanner scanner ;
69
80
@@ -80,10 +91,8 @@ class BeanDefinitionLoader {
80
91
Assert .notEmpty (sources , "Sources must not be empty" );
81
92
this .sources = sources ;
82
93
this .annotatedReader = new AnnotatedBeanDefinitionReader (registry );
83
- this .xmlReader = new XmlBeanDefinitionReader (registry );
84
- if (isGroovyPresent ()) {
85
- this .groovyReader = new GroovyBeanDefinitionReader (registry );
86
- }
94
+ this .xmlReader = (IS_XML_ENABLED ? new XmlBeanDefinitionReader (registry ) : null );
95
+ this .groovyReader = (isGroovyPresent () ? new GroovyBeanDefinitionReader (registry ) : null );
87
96
this .scanner = new ClassPathBeanDefinitionScanner (registry );
88
97
this .scanner .addExcludeFilter (new ClassExcludeFilter (sources ));
89
98
}
@@ -94,8 +103,10 @@ class BeanDefinitionLoader {
94
103
*/
95
104
void setBeanNameGenerator (BeanNameGenerator beanNameGenerator ) {
96
105
this .annotatedReader .setBeanNameGenerator (beanNameGenerator );
97
- this .xmlReader .setBeanNameGenerator (beanNameGenerator );
98
106
this .scanner .setBeanNameGenerator (beanNameGenerator );
107
+ if (IS_XML_ENABLED ) {
108
+ this .xmlReader .setBeanNameGenerator (beanNameGenerator );
109
+ }
99
110
}
100
111
101
112
/**
@@ -104,8 +115,10 @@ void setBeanNameGenerator(BeanNameGenerator beanNameGenerator) {
104
115
*/
105
116
void setResourceLoader (ResourceLoader resourceLoader ) {
106
117
this .resourceLoader = resourceLoader ;
107
- this .xmlReader .setResourceLoader (resourceLoader );
108
118
this .scanner .setResourceLoader (resourceLoader );
119
+ if (IS_XML_ENABLED ) {
120
+ this .xmlReader .setResourceLoader (resourceLoader );
121
+ }
109
122
}
110
123
111
124
/**
@@ -114,8 +127,10 @@ void setResourceLoader(ResourceLoader resourceLoader) {
114
127
*/
115
128
void setEnvironment (ConfigurableEnvironment environment ) {
116
129
this .annotatedReader .setEnvironment (environment );
117
- this .xmlReader .setEnvironment (environment );
118
130
this .scanner .setEnvironment (environment );
131
+ if (IS_XML_ENABLED ) {
132
+ this .xmlReader .setEnvironment (environment );
133
+ }
119
134
}
120
135
121
136
/**
@@ -167,6 +182,9 @@ private void load(Resource source) {
167
182
this .groovyReader .loadBeanDefinitions (source );
168
183
}
169
184
else {
185
+ if (!IS_XML_ENABLED ) {
186
+ throw new BeanDefinitionStoreException ("Cannot load resources when XML support is disabled" );
187
+ }
170
188
this .xmlReader .loadBeanDefinitions (source );
171
189
}
172
190
}
0 commit comments