From 00bda65848fd111345b333da2479e5f87f4d7bf9 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 19 Jan 2024 17:09:58 +0100 Subject: [PATCH] Polishing --- .../AspectJExpressionPointcutTests.java | 1 - .../context/SmartLifecycle.java | 4 +-- ...ocalContainerEntityManagerFactoryBean.java | 3 +- .../DefaultPersistenceUnitManager.java | 2 +- .../ManagedClassNameFilter.java | 3 +- .../PersistenceManagedTypesScanner.java | 32 ++++++++++++------- .../reactive/TransactionContext.java | 11 ++++--- .../server/reactive/ChannelSendOperator.java | 4 +-- .../reactive/JettyHttpHandlerAdapter.java | 3 +- .../handler/AbstractHandlerMethodMapping.java | 1 + 10 files changed, 38 insertions(+), 26 deletions(-) diff --git a/spring-aop/src/test/java/org/springframework/aop/aspectj/AspectJExpressionPointcutTests.java b/spring-aop/src/test/java/org/springframework/aop/aspectj/AspectJExpressionPointcutTests.java index 3c2399be13..d40cd7ba38 100644 --- a/spring-aop/src/test/java/org/springframework/aop/aspectj/AspectJExpressionPointcutTests.java +++ b/spring-aop/src/test/java/org/springframework/aop/aspectj/AspectJExpressionPointcutTests.java @@ -414,7 +414,6 @@ class AspectJExpressionPointcutTests { assertThat(ajexp.matches(BeanA.class.getMethod("getAge"), proxy.getClass())).isTrue(); } - @Test void testNotAnnotationOnCglibProxyMethod() throws Exception { String expression = "!@annotation(test.annotation.transaction.Tx)"; diff --git a/spring-context/src/main/java/org/springframework/context/SmartLifecycle.java b/spring-context/src/main/java/org/springframework/context/SmartLifecycle.java index 06f98a4048..5ad500d1b2 100644 --- a/spring-context/src/main/java/org/springframework/context/SmartLifecycle.java +++ b/spring-context/src/main/java/org/springframework/context/SmartLifecycle.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -121,7 +121,7 @@ public interface SmartLifecycle extends Lifecycle, Phased { /** * Return the phase that this lifecycle object is supposed to run in. *

The default implementation returns {@link #DEFAULT_PHASE} in order to - * let {@code stop()} callbacks execute after regular {@code Lifecycle} + * let {@code stop()} callbacks execute before regular {@code Lifecycle} * implementations. * @see #isAutoStartup() * @see #start() diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java index ec5dbaddae..ed9af96f4a 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java @@ -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); diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java index 2cb8950d82..90b57f1cc4 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java @@ -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) { diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ManagedClassNameFilter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ManagedClassNameFilter.java index 8e4cb0e290..d02fe4a7fa 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ManagedClassNameFilter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ManagedClassNameFilter.java @@ -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 */ diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceManagedTypesScanner.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceManagedTypesScanner.java index 2ca1a4bf52..7ff998ad4e 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceManagedTypesScanner.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceManagedTypesScanner.java @@ -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; } } diff --git a/spring-tx/src/main/java/org/springframework/transaction/reactive/TransactionContext.java b/spring-tx/src/main/java/org/springframework/transaction/reactive/TransactionContext.java index 3fe4ad088d..9a6c191a91 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/reactive/TransactionContext.java +++ b/spring-tx/src/main/java/org/springframework/transaction/reactive/TransactionContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2021 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,18 +36,21 @@ import org.springframework.lang.Nullable; */ public class TransactionContext { - private final @Nullable TransactionContext parent; + @Nullable + private final TransactionContext parent; private final Map resources = new LinkedHashMap<>(); @Nullable private Set synchronizations; - private volatile @Nullable String currentTransactionName; + @Nullable + private volatile String currentTransactionName; private volatile boolean currentTransactionReadOnly; - private volatile @Nullable Integer currentTransactionIsolationLevel; + @Nullable + private volatile Integer currentTransactionIsolationLevel; private volatile boolean actualTransactionActive; diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ChannelSendOperator.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ChannelSendOperator.java index 63c4033a78..abf0b6ab8f 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ChannelSendOperator.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ChannelSendOperator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,7 +39,7 @@ import org.springframework.util.Assert; * to defer the invocation of the write function, until we know if the source * publisher will begin publishing without an error. If the first emission is * an error, the write function is bypassed, and the error is sent directly - * through the result publisher. Otherwise the write function is invoked. + * through the result publisher. Otherwise, the write function is invoked. * * @author Rossen Stoyanchev * @author Stephane Maldini diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java index b6240d2553..d45c72b266 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,7 +39,6 @@ import org.springframework.core.io.buffer.DataBufferFactory; */ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter { - public JettyHttpHandlerAdapter(HttpHandler httpHandler) { super(httpHandler); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java index 600e308651..c7198ffe92 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java @@ -565,6 +565,7 @@ public abstract class AbstractHandlerMethodMapping extends AbstractHandlerMap /** * A registry that maintains all mappings to handler methods, exposing methods * to perform lookups and providing concurrent access. + * *

Package-private for testing purposes. */ class MappingRegistry {