Polishing
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user