Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
96ede9b9
Commit
96ede9b9
authored
Mar 04, 2021
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '2.4.x'
Closes gh-25491
parents
3b235e49
ca414733
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
37 additions
and
5 deletions
+37
-5
EntityScanPackages.java
...amework/boot/autoconfigure/domain/EntityScanPackages.java
+17
-5
EntityScannerTests.java
...amework/boot/autoconfigure/domain/EntityScannerTests.java
+20
-0
No files found.
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/domain/EntityScanPackages.java
View file @
96ede9b9
...
...
@@ -32,6 +32,7 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import
org.springframework.beans.factory.support.GenericBeanDefinition
;
import
org.springframework.context.annotation.ImportBeanDefinitionRegistrar
;
import
org.springframework.core.annotation.AnnotationAttributes
;
import
org.springframework.core.env.Environment
;
import
org.springframework.core.type.AnnotationMetadata
;
import
org.springframework.util.Assert
;
import
org.springframework.util.ClassUtils
;
...
...
@@ -124,6 +125,12 @@ public class EntityScanPackages {
*/
static
class
Registrar
implements
ImportBeanDefinitionRegistrar
{
private
final
Environment
environment
;
Registrar
(
Environment
environment
)
{
this
.
environment
=
environment
;
}
@Override
public
void
registerBeanDefinitions
(
AnnotationMetadata
metadata
,
BeanDefinitionRegistry
registry
)
{
register
(
registry
,
getPackagesToScan
(
metadata
));
...
...
@@ -132,11 +139,12 @@ public class EntityScanPackages {
private
Set
<
String
>
getPackagesToScan
(
AnnotationMetadata
metadata
)
{
AnnotationAttributes
attributes
=
AnnotationAttributes
.
fromMap
(
metadata
.
getAnnotationAttributes
(
EntityScan
.
class
.
getName
()));
String
[]
basePackages
=
attributes
.
getStringArray
(
"basePackages"
);
Class
<?>[]
basePackageClasses
=
attributes
.
getClassArray
(
"basePackageClasses"
);
Set
<
String
>
packagesToScan
=
new
LinkedHashSet
<>(
Arrays
.
asList
(
basePackages
));
for
(
Class
<?>
basePackageClass
:
basePackageClasses
)
{
packagesToScan
.
add
(
ClassUtils
.
getPackageName
(
basePackageClass
));
Set
<
String
>
packagesToScan
=
new
LinkedHashSet
<>();
for
(
String
basePackage
:
attributes
.
getStringArray
(
"basePackages"
))
{
addResolvedPackage
(
basePackage
,
packagesToScan
);
}
for
(
Class
<?>
basePackageClass
:
attributes
.
getClassArray
(
"basePackageClasses"
))
{
addResolvedPackage
(
ClassUtils
.
getPackageName
(
basePackageClass
),
packagesToScan
);
}
if
(
packagesToScan
.
isEmpty
())
{
String
packageName
=
ClassUtils
.
getPackageName
(
metadata
.
getClassName
());
...
...
@@ -146,6 +154,10 @@ public class EntityScanPackages {
return
packagesToScan
;
}
private
void
addResolvedPackage
(
String
packageName
,
Set
<
String
>
packagesToScan
)
{
packagesToScan
.
add
(
this
.
environment
.
resolvePlaceholders
(
packageName
));
}
}
static
class
EntityScanPackagesBeanDefinition
extends
GenericBeanDefinition
{
...
...
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/domain/EntityScannerTests.java
View file @
96ede9b9
...
...
@@ -31,6 +31,7 @@ import org.springframework.boot.autoconfigure.domain.scan.b.EmbeddableB;
import
org.springframework.boot.autoconfigure.domain.scan.b.EntityB
;
import
org.springframework.boot.autoconfigure.domain.scan.c.EmbeddableC
;
import
org.springframework.boot.autoconfigure.domain.scan.c.EntityC
;
import
org.springframework.boot.test.util.TestPropertyValues
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
import
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider
;
...
...
@@ -66,6 +67,19 @@ class EntityScannerTests {
context
.
close
();
}
@Test
void
scanShouldScanFromResolvedPlaceholderPackage
()
throws
Exception
{
AnnotationConfigApplicationContext
context
=
new
AnnotationConfigApplicationContext
();
TestPropertyValues
.
of
(
"com.example.entity-package=org.springframework.boot.autoconfigure.domain.scan"
)
.
applyTo
(
context
);
context
.
register
(
ScanPlaceholderConfig
.
class
);
context
.
refresh
();
EntityScanner
scanner
=
new
EntityScanner
(
context
);
Set
<
Class
<?>>
scanned
=
scanner
.
scan
(
Entity
.
class
);
assertThat
(
scanned
).
containsOnly
(
EntityA
.
class
,
EntityB
.
class
,
EntityC
.
class
);
context
.
close
();
}
@Test
void
scanShouldScanFromMultiplePackages
()
throws
Exception
{
AnnotationConfigApplicationContext
context
=
new
AnnotationConfigApplicationContext
(
ScanAConfig
.
class
,
...
...
@@ -141,4 +155,10 @@ class EntityScannerTests {
}
@Configuration
(
proxyBeanMethods
=
false
)
@EntityScan
(
"${com.example.entity-package}"
)
static
class
ScanPlaceholderConfig
{
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment