32
32
import org .springframework .beans .factory .support .GenericBeanDefinition ;
33
33
import org .springframework .context .annotation .ImportBeanDefinitionRegistrar ;
34
34
import org .springframework .core .annotation .AnnotationAttributes ;
35
+ import org .springframework .core .env .Environment ;
35
36
import org .springframework .core .type .AnnotationMetadata ;
36
37
import org .springframework .util .Assert ;
37
38
import org .springframework .util .ClassUtils ;
@@ -124,6 +125,12 @@ public static void register(BeanDefinitionRegistry registry, Collection<String>
124
125
*/
125
126
static class Registrar implements ImportBeanDefinitionRegistrar {
126
127
128
+ private final Environment environment ;
129
+
130
+ Registrar (Environment environment ) {
131
+ this .environment = environment ;
132
+ }
133
+
127
134
@ Override
128
135
public void registerBeanDefinitions (AnnotationMetadata metadata , BeanDefinitionRegistry registry ) {
129
136
register (registry , getPackagesToScan (metadata ));
@@ -132,11 +139,12 @@ public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionR
132
139
private Set <String > getPackagesToScan (AnnotationMetadata metadata ) {
133
140
AnnotationAttributes attributes = AnnotationAttributes
134
141
.fromMap (metadata .getAnnotationAttributes (EntityScan .class .getName ()));
135
- String [] basePackages = attributes .getStringArray ("basePackages" );
136
- Class <?>[] basePackageClasses = attributes .getClassArray ("basePackageClasses" );
137
- Set <String > packagesToScan = new LinkedHashSet <>(Arrays .asList (basePackages ));
138
- for (Class <?> basePackageClass : basePackageClasses ) {
139
- packagesToScan .add (ClassUtils .getPackageName (basePackageClass ));
142
+ Set <String > packagesToScan = new LinkedHashSet <>();
143
+ for (String basePackage : attributes .getStringArray ("basePackages" )) {
144
+ addResolvedPackage (basePackage , packagesToScan );
145
+ }
146
+ for (Class <?> basePackageClass : attributes .getClassArray ("basePackageClasses" )) {
147
+ addResolvedPackage (ClassUtils .getPackageName (basePackageClass ), packagesToScan );
140
148
}
141
149
if (packagesToScan .isEmpty ()) {
142
150
String packageName = ClassUtils .getPackageName (metadata .getClassName ());
@@ -146,6 +154,10 @@ private Set<String> getPackagesToScan(AnnotationMetadata metadata) {
146
154
return packagesToScan ;
147
155
}
148
156
157
+ private void addResolvedPackage (String packageName , Set <String > packagesToScan ) {
158
+ packagesToScan .add (this .environment .resolvePlaceholders (packageName ));
159
+ }
160
+
149
161
}
150
162
151
163
static class EntityScanPackagesBeanDefinition extends GenericBeanDefinition {
0 commit comments