Polishing

This commit is contained in:
Juergen Hoeller
2023-12-22 12:54:16 +01:00
parent b272f4e615
commit 033c8df53f
9 changed files with 33 additions and 33 deletions

View File

@@ -102,6 +102,12 @@ public class AdvisedSupport extends ProxyConfig implements Advised {
*/ */
private List<Advisor> advisors = new ArrayList<>(); private List<Advisor> advisors = new ArrayList<>();
/**
* List of minimal {@link AdvisorKeyEntry} instances,
* to be assigned to the {@link #advisors} field on reduction.
* @since 6.0.10
* @see #reduceToAdvisorKey
*/
private List<Advisor> advisorKey = this.advisors; private List<Advisor> advisorKey = this.advisors;
@@ -557,18 +563,6 @@ public class AdvisedSupport extends ProxyConfig implements Advised {
} }
//---------------------------------------------------------------------
// Serialization support
//---------------------------------------------------------------------
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Rely on default serialization; just initialize state after deserialization.
ois.defaultReadObject();
// Initialize transient fields.
this.methodCache = new ConcurrentHashMap<>(32);
}
@Override @Override
public String toProxyConfigString() { public String toProxyConfigString() {
return toString(); return toString();
@@ -590,6 +584,19 @@ public class AdvisedSupport extends ProxyConfig implements Advised {
} }
//---------------------------------------------------------------------
// Serialization support
//---------------------------------------------------------------------
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Rely on default serialization; just initialize state after deserialization.
ois.defaultReadObject();
// Initialize transient fields.
this.methodCache = new ConcurrentHashMap<>(32);
}
/** /**
* Simple wrapper class around a Method. Used as the key when * Simple wrapper class around a Method. Used as the key when
* caching methods, for efficient equals and hashCode comparisons. * caching methods, for efficient equals and hashCode comparisons.
@@ -639,7 +646,7 @@ public class AdvisedSupport extends ProxyConfig implements Advised {
* @see #getConfigurationOnlyCopy() * @see #getConfigurationOnlyCopy()
* @see #getAdvisorKey() * @see #getAdvisorKey()
*/ */
private static class AdvisorKeyEntry implements Advisor { private static final class AdvisorKeyEntry implements Advisor {
private final Class<?> adviceType; private final Class<?> adviceType;
@@ -649,7 +656,6 @@ public class AdvisedSupport extends ProxyConfig implements Advised {
@Nullable @Nullable
private final String methodMatcherKey; private final String methodMatcherKey;
public AdvisorKeyEntry(Advisor advisor) { public AdvisorKeyEntry(Advisor advisor) {
this.adviceType = advisor.getAdvice().getClass(); this.adviceType = advisor.getAdvice().getClass();
if (advisor instanceof PointcutAdvisor pointcutAdvisor) { if (advisor instanceof PointcutAdvisor pointcutAdvisor) {

View File

@@ -120,11 +120,7 @@ class ConstructorResolver {
/** /**
* "autowire constructor" (with constructor arguments by type) behavior. * "autowire constructor" (with constructor arguments by type) behavior.
* Also applied if explicit constructor argument values are specified, * Also applied if explicit constructor argument values are specified.
* matching all remaining arguments with beans from the bean factory.
* <p>This corresponds to constructor injection: In this mode, a Spring
* bean factory is able to host components that expect constructor-based
* dependency resolution.
* @param beanName the name of the bean * @param beanName the name of the bean
* @param mbd the merged bean definition for the bean * @param mbd the merged bean definition for the bean
* @param chosenCtors chosen candidate constructors (or {@code null} if none) * @param chosenCtors chosen candidate constructors (or {@code null} if none)

View File

@@ -236,7 +236,7 @@ public class CaffeineCacheManager implements CacheManager {
* Build a common {@link CaffeineCache} instance for the specified cache name, * Build a common {@link CaffeineCache} instance for the specified cache name,
* using the common Caffeine configuration specified on this cache manager. * using the common Caffeine configuration specified on this cache manager.
* <p>Delegates to {@link #adaptCaffeineCache} as the adaptation method to * <p>Delegates to {@link #adaptCaffeineCache} as the adaptation method to
* Spring's cache abstraction (allowing for centralized decoration etc), * Spring's cache abstraction (allowing for centralized decoration etc.),
* passing in a freshly built native Caffeine Cache instance. * passing in a freshly built native Caffeine Cache instance.
* @param name the name of the cache * @param name the name of the cache
* @return the Spring CaffeineCache adapter (or a decorator thereof) * @return the Spring CaffeineCache adapter (or a decorator thereof)

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2020 the original author or authors. * Copyright 2002-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@ import org.springframework.lang.Nullable;
* Abstract the invocation of a cache operation. * Abstract the invocation of a cache operation.
* *
* <p>Does not provide a way to transmit checked exceptions but * <p>Does not provide a way to transmit checked exceptions but
* provide a special exception that should be used to wrap any * provides a special exception that should be used to wrap any
* exception that was thrown by the underlying invocation. * exception that was thrown by the underlying invocation.
* Callers are expected to handle this issue type specifically. * Callers are expected to handle this issue type specifically.
* *

View File

@@ -70,7 +70,7 @@ public interface TaskScheduler {
* wrapping a cron expression * wrapping a cron expression
* @return a {@link ScheduledFuture} representing pending completion of the task, * @return a {@link ScheduledFuture} representing pending completion of the task,
* or {@code null} if the given Trigger object never fires (i.e. returns * or {@code null} if the given Trigger object never fires (i.e. returns
* {@code null} from {@link Trigger#nextExecutionTime}) * {@code null} from {@link Trigger#nextExecution})
* @throws org.springframework.core.task.TaskRejectedException if the given task was not accepted * @throws org.springframework.core.task.TaskRejectedException if the given task was not accepted
* for internal reasons (e.g. a pool overload handling policy or a pool shutdown in progress) * for internal reasons (e.g. a pool overload handling policy or a pool shutdown in progress)
* @see org.springframework.scheduling.support.CronTrigger * @see org.springframework.scheduling.support.CronTrigger

View File

@@ -159,7 +159,7 @@ final class SerializableTypeWrapper {
/** /**
* Return the source of the type, or {@code null} if not known. * Return the source of the type, or {@code null} if not known.
* <p>The default implementations returns {@code null}. * <p>The default implementation returns {@code null}.
*/ */
@Nullable @Nullable
default Object getSource() { default Object getSource() {

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2021 the original author or authors. * Copyright 2002-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -23,7 +23,6 @@ import org.junit.jupiter.api.Test;
import org.springframework.expression.EvaluationException; import org.springframework.expression.EvaluationException;
import org.springframework.expression.TypeComparator; import org.springframework.expression.TypeComparator;
import org.springframework.expression.spel.support.StandardTypeComparator; import org.springframework.expression.spel.support.StandardTypeComparator;
import org.springframework.lang.NonNull;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@@ -134,6 +133,7 @@ public class StandardTypeComparatorTests {
assertThat(comparator.compare(t2, t1)).isPositive(); assertThat(comparator.compare(t2, t1)).isPositive();
} }
static class ComparableType implements Comparable<ComparableType> { static class ComparableType implements Comparable<ComparableType> {
private final int id; private final int id;
@@ -143,10 +143,9 @@ public class StandardTypeComparatorTests {
} }
@Override @Override
public int compareTo(@NonNull ComparableType other) { public int compareTo(ComparableType other) {
return this.id - other.id; return this.id - other.id;
} }
} }
} }

View File

@@ -32,14 +32,15 @@ import static org.mockito.Mockito.verify;
*/ */
public class SimpleClientHttpRequestFactoryTests { public class SimpleClientHttpRequestFactoryTests {
@Test // SPR-13225
@Test // SPR-13225
public void headerWithNullValue() { public void headerWithNullValue() {
HttpURLConnection urlConnection = mock(); HttpURLConnection urlConnection = mock();
given(urlConnection.getRequestMethod()).willReturn("GET"); given(urlConnection.getRequestMethod()).willReturn("GET");
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("foo", null); headers.set("foo", null);
SimpleBufferingClientHttpRequest.addHeaders(urlConnection, headers); SimpleBufferingClientHttpRequest.addHeaders(urlConnection, headers);
verify(urlConnection, times(1)).addRequestProperty("foo", ""); verify(urlConnection, times(1)).addRequestProperty("foo", "");
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2022 the original author or authors. * Copyright 2002-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -51,7 +51,6 @@ import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ReactiveHttpOutputMessage; import org.springframework.http.ReactiveHttpOutputMessage;
import org.springframework.lang.NonNull;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail; import static org.assertj.core.api.Assertions.fail;
@@ -173,7 +172,6 @@ public class ClientHttpConnectorTests {
.verify(); .verify();
} }
@NonNull
private Buffer randomBody(int size) { private Buffer randomBody(int size) {
Buffer responseBody = new Buffer(); Buffer responseBody = new Buffer();
Random rnd = new Random(); Random rnd = new Random();