Skip to content

Commit 1acd5cf

Browse files
committed
Polish methods to register async interceptors
1 parent d701464 commit 1acd5cf

File tree

4 files changed

+45
-38
lines changed

4 files changed

+45
-38
lines changed

spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncManager.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,22 @@ public DeferredResultProcessingInterceptor getDeferredResultInterceptor(Object k
181181
* @param interceptor the interceptor to register
182182
*/
183183
public void registerCallableInterceptor(Object key, CallableProcessingInterceptor interceptor) {
184-
Assert.notNull(interceptor, "interceptor is required");
184+
Assert.notNull(key, "Key is required");
185+
Assert.notNull(interceptor, "CallableProcessingInterceptor is required");
185186
this.callableInterceptors.put(key, interceptor);
186187
}
187188

188-
public void registerAllCallableInterceptors(Map<Object, CallableProcessingInterceptor> interceptors) {
189-
Assert.notNull(interceptors);
190-
this.callableInterceptors.putAll(interceptors);
189+
/**
190+
* Register a {@link CallableProcessingInterceptor} without a key.
191+
* The key is derived from the class name and hashcode.
192+
* @param interceptor the interceptor to register
193+
*/
194+
public void registerCallableInterceptor(CallableProcessingInterceptor... interceptors) {
195+
Assert.notNull(interceptors, "A CallableProcessingInterceptor is required");
196+
for (CallableProcessingInterceptor interceptor : interceptors) {
197+
String key = interceptor.getClass().getName() + ":" + interceptor.hashCode();
198+
this.callableInterceptors.put(key, interceptor);
199+
}
191200
}
192201

193202
/**
@@ -196,13 +205,23 @@ public void registerAllCallableInterceptors(Map<Object, CallableProcessingInterc
196205
* @param interceptor the interceptor to register
197206
*/
198207
public void registerDeferredResultInterceptor(Object key, DeferredResultProcessingInterceptor interceptor) {
199-
Assert.notNull(interceptor, "interceptor is required");
208+
Assert.notNull(key, "Key is required");
209+
Assert.notNull(interceptor, "DeferredResultProcessingInterceptor is required");
200210
this.deferredResultInterceptors.put(key, interceptor);
201211
}
202212

203-
public void registerAllDeferredResultInterceptors(Map<Object, DeferredResultProcessingInterceptor> interceptors) {
204-
Assert.notNull(interceptors);
205-
this.deferredResultInterceptors.putAll(interceptors);
213+
/**
214+
* Register a {@link DeferredResultProcessingInterceptor} without a key.
215+
* The key is derived from the class name and hashcode.
216+
* @param key the key
217+
* @param interceptors the interceptor to register
218+
*/
219+
public void registerDeferredResultInterceptor(DeferredResultProcessingInterceptor... interceptors) {
220+
Assert.notNull(interceptors, "A DeferredResultProcessingInterceptor is required");
221+
for (DeferredResultProcessingInterceptor interceptor : interceptors) {
222+
String key = interceptors.getClass().getName() + ":" + interceptors.hashCode();
223+
this.deferredResultInterceptors.put(key, interceptor);
224+
}
206225
}
207226

208227
/**

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,9 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
138138

139139
private Long asyncRequestTimeout;
140140

141-
private final Map<Object, CallableProcessingInterceptor> callableInterceptors =
142-
new LinkedHashMap<Object, CallableProcessingInterceptor>();
141+
private CallableProcessingInterceptor[] callableInterceptors = new CallableProcessingInterceptor[] {};
143142

144-
private final Map<Object, DeferredResultProcessingInterceptor> deferredResultInterceptors =
145-
new LinkedHashMap<Object, DeferredResultProcessingInterceptor>();
143+
private DeferredResultProcessingInterceptor[] deferredResultInterceptors = new DeferredResultProcessingInterceptor[] {};
146144

147145
private boolean ignoreDefaultModelOnRedirect = false;
148146

@@ -378,10 +376,7 @@ public void setAsyncRequestTimeout(long timeout) {
378376
*/
379377
public void setCallableInterceptors(List<CallableProcessingInterceptor> interceptors) {
380378
Assert.notNull(interceptors);
381-
for (int index = 0 ; index < interceptors.size(); index++) {
382-
CallableProcessingInterceptor interceptor = interceptors.get(index);
383-
this.callableInterceptors.put(getInterceptorKey(interceptor, index), interceptor);
384-
}
379+
this.callableInterceptors = interceptors.toArray(new CallableProcessingInterceptor[interceptors.size()]);
385380
}
386381

387382
/**
@@ -390,14 +385,7 @@ public void setCallableInterceptors(List<CallableProcessingInterceptor> intercep
390385
*/
391386
public void setDeferredResultInterceptors(List<DeferredResultProcessingInterceptor> interceptors) {
392387
Assert.notNull(interceptors);
393-
for (int index = 0 ; index < interceptors.size(); index++) {
394-
DeferredResultProcessingInterceptor interceptor = interceptors.get(index);
395-
this.deferredResultInterceptors.put(getInterceptorKey(interceptor, index), interceptor);
396-
}
397-
}
398-
399-
private String getInterceptorKey(Object interceptor, int index) {
400-
return this.hashCode() + ":" + interceptor.getClass().getName() + "#" + index;
388+
this.deferredResultInterceptors = interceptors.toArray(new DeferredResultProcessingInterceptor[interceptors.size()]);
401389
}
402390

403391
/**
@@ -740,8 +728,8 @@ private ModelAndView invokeHandleMethod(HttpServletRequest request,
740728
final WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
741729
asyncManager.setTaskExecutor(this.taskExecutor);
742730
asyncManager.setAsyncWebRequest(asyncWebRequest);
743-
asyncManager.registerAllCallableInterceptors(this.callableInterceptors);
744-
asyncManager.registerAllDeferredResultInterceptors(this.deferredResultInterceptors);
731+
asyncManager.registerCallableInterceptor(this.callableInterceptors);
732+
asyncManager.registerDeferredResultInterceptor(this.deferredResultInterceptors);
745733

746734
if (asyncManager.hasConcurrentResult()) {
747735
Object result = asyncManager.getConcurrentResult();

spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -484,13 +484,13 @@ public void testAsyncSupportOptions() throws Exception {
484484
assertEquals(ConcurrentTaskExecutor.class, fieldAccessor.getPropertyValue("taskExecutor").getClass());
485485
assertEquals(2500L, fieldAccessor.getPropertyValue("asyncRequestTimeout"));
486486

487-
Map<Object, CallableProcessingInterceptor> callableInterceptors =
488-
(Map<Object, CallableProcessingInterceptor>) fieldAccessor.getPropertyValue("callableInterceptors");
489-
assertEquals(1, callableInterceptors.size());
487+
CallableProcessingInterceptor[] callableInterceptors =
488+
(CallableProcessingInterceptor[]) fieldAccessor.getPropertyValue("callableInterceptors");
489+
assertEquals(1, callableInterceptors.length);
490490

491-
Map<Object, DeferredResultProcessingInterceptor> deferredResultInterceptors =
492-
(Map<Object, DeferredResultProcessingInterceptor>) fieldAccessor.getPropertyValue("deferredResultInterceptors");
493-
assertEquals(1, deferredResultInterceptors.size());
491+
DeferredResultProcessingInterceptor[] deferredResultInterceptors =
492+
(DeferredResultProcessingInterceptor[]) fieldAccessor.getPropertyValue("deferredResultInterceptors");
493+
assertEquals(1, deferredResultInterceptors.length);
494494
}
495495

496496

spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,13 @@ public void requestMappingHandlerAdapter() throws Exception {
149149
assertEquals(ConcurrentTaskExecutor.class, fieldAccessor.getPropertyValue("taskExecutor").getClass());
150150
assertEquals(2500L, fieldAccessor.getPropertyValue("asyncRequestTimeout"));
151151

152-
Map<Object, CallableProcessingInterceptor> callableInterceptors =
153-
(Map<Object, CallableProcessingInterceptor>) fieldAccessor.getPropertyValue("callableInterceptors");
154-
assertEquals(1, callableInterceptors.size());
152+
CallableProcessingInterceptor[] callableInterceptors =
153+
(CallableProcessingInterceptor[]) fieldAccessor.getPropertyValue("callableInterceptors");
154+
assertEquals(1, callableInterceptors.length);
155155

156-
Map<Object, DeferredResultProcessingInterceptor> deferredResultInterceptors =
157-
(Map<Object, DeferredResultProcessingInterceptor>) fieldAccessor.getPropertyValue("deferredResultInterceptors");
158-
assertEquals(1, deferredResultInterceptors.size());
156+
DeferredResultProcessingInterceptor[] deferredResultInterceptors =
157+
(DeferredResultProcessingInterceptor[]) fieldAccessor.getPropertyValue("deferredResultInterceptors");
158+
assertEquals(1, deferredResultInterceptors.length);
159159

160160
assertEquals(false, fieldAccessor.getPropertyValue("ignoreDefaultModelOnRedirect"));
161161
}

0 commit comments

Comments
 (0)