Polishing

This commit is contained in:
Juergen Hoeller
2024-01-19 17:09:58 +01:00
parent 6697461003
commit 00bda65848
10 changed files with 38 additions and 26 deletions

View File

@@ -204,8 +204,9 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage
/**
* Set the {@link ManagedClassNameFilter} to apply on entity classes discovered
* using {@linkplain #setPackagesToScan(String...) classpath scanning}.
* @param managedClassNameFilter the predicate to filter entity classes
* @param managedClassNameFilter a predicate to filter entity classes
* @since 6.1.4
* @see DefaultPersistenceUnitManager#setManagedClassNameFilter
*/
public void setManagedClassNameFilter(ManagedClassNameFilter managedClassNameFilter) {
this.internalPersistenceUnitManager.setManagedClassNameFilter(managedClassNameFilter);

View File

@@ -238,7 +238,7 @@ public class DefaultPersistenceUnitManager
/**
* Set the {@link ManagedClassNameFilter} to apply on entity classes discovered
* using {@linkplain #setPackagesToScan(String...) classpath scanning}.
* @param managedClassNameFilter the predicate to filter entity classes
* @param managedClassNameFilter a predicate to filter entity classes
* @since 6.1.4
*/
public void setManagedClassNameFilter(ManagedClassNameFilter managedClassNameFilter) {

View File

@@ -22,12 +22,13 @@ package org.springframework.orm.jpa.persistenceunit;
*
* @author Stephane Nicoll
* @since 6.1.4
* @see DefaultPersistenceUnitManager#setManagedClassNameFilter
*/
@FunctionalInterface
public interface ManagedClassNameFilter {
/**
* Test if the given clas name matches the filter.
* Test if the given class name matches the filter.
* @param className the fully qualified class name of the persistent type to test
* @return {@code true} if the class name matches
*/

View File

@@ -83,17 +83,26 @@ public final class PersistenceManagedTypesScanner {
private final ManagedClassNameFilter managedClassNameFilter;
/**
* Create a new {@code PersistenceManagedTypesScanner} for the given resource loader.
* @param resourceLoader the {@code ResourceLoader} to use
*/
public PersistenceManagedTypesScanner(ResourceLoader resourceLoader) {
this(resourceLoader, null);
}
/**
* Create a new {@code PersistenceManagedTypesScanner} for the given resource loader.
* @param resourceLoader the {@code ResourceLoader} to use
* @param managedClassNameFilter an optional predicate to filter entity classes
* @since 6.1.4
*/
public PersistenceManagedTypesScanner(ResourceLoader resourceLoader,
@Nullable ManagedClassNameFilter managedClassNameFilter) {
this.resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader);
this.componentsIndex = CandidateComponentsIndexLoader.loadIndex(resourceLoader.getClassLoader());
this.managedClassNameFilter = (managedClassNameFilter != null ? managedClassNameFilter
: className -> true);
}
public PersistenceManagedTypesScanner(ResourceLoader resourceLoader) {
this(resourceLoader, null);
this.managedClassNameFilter = (managedClassNameFilter != null ? managedClassNameFilter : className -> true);
}
@@ -126,13 +135,12 @@ public final class PersistenceManagedTypesScanner {
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
ClassUtils.convertClassNameToResourcePath(pkg) + CLASS_RESOURCE_PATTERN;
Resource[] resources = this.resourcePatternResolver.getResources(pattern);
MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(this.resourcePatternResolver);
MetadataReaderFactory factory = new CachingMetadataReaderFactory(this.resourcePatternResolver);
for (Resource resource : resources) {
try {
MetadataReader reader = readerFactory.getMetadataReader(resource);
MetadataReader reader = factory.getMetadataReader(resource);
String className = reader.getClassMetadata().getClassName();
if (matchesEntityTypeFilter(reader, readerFactory)
&& this.managedClassNameFilter.matches(className)) {
if (matchesEntityTypeFilter(reader, factory) && this.managedClassNameFilter.matches(className)) {
scanResult.managedClassNames.add(className);
if (scanResult.persistenceUnitRootUrl == null) {
URL url = resource.getURL();
@@ -168,9 +176,9 @@ public final class PersistenceManagedTypesScanner {
* Check whether any of the configured entity type filters matches
* the current class descriptor contained in the metadata reader.
*/
private boolean matchesEntityTypeFilter(MetadataReader reader, MetadataReaderFactory readerFactory) throws IOException {
private boolean matchesEntityTypeFilter(MetadataReader reader, MetadataReaderFactory factory) throws IOException {
for (TypeFilter filter : entityTypeFilters) {
if (filter.match(reader, readerFactory)) {
if (filter.match(reader, factory)) {
return true;
}
}