|
1 | 1 | /* |
2 | | - * Copyright 2002-2013 the original author or authors. |
| 2 | + * Copyright 2002-2015 the original author or authors. |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
|
48 | 48 | import org.springframework.beans.factory.BeanInitializationException; |
49 | 49 | import org.springframework.beans.factory.NoSuchBeanDefinitionException; |
50 | 50 | import org.springframework.context.ApplicationContext; |
51 | | -import org.springframework.core.OrderComparator; |
| 51 | +import org.springframework.core.annotation.AnnotationAwareOrderComparator; |
52 | 52 | import org.springframework.core.io.ClassPathResource; |
53 | 53 | import org.springframework.core.io.support.PropertiesLoaderUtils; |
54 | 54 | import org.springframework.core.style.StylerUtils; |
|
66 | 66 | * controllers. Dispatches to registered handlers for processing a portlet request. |
67 | 67 | * |
68 | 68 | * <p>This portlet is very flexible: It can be used with just about any workflow, |
69 | | - * with the installation of the appropriate adapter classes. It offers the |
70 | | - * following functionality that distinguishes it from other request-driven |
71 | | - * portlet MVC frameworks: |
| 69 | + * with the installation of the appropriate adapter classes. It offers the following |
| 70 | + * functionality that distinguishes it from other request-driven Portlet MVC frameworks: |
72 | 71 | * |
73 | 72 | * <ul> |
74 | 73 | * <li>It is based around a JavaBeans configuration mechanism. |
|
77 | 76 | * as part of an application - to control the routing of requests to handler objects. |
78 | 77 | * Default is a {@link org.springframework.web.portlet.mvc.annotation.DefaultAnnotationHandlerMapping}. |
79 | 78 | * HandlerMapping objects can be defined as beans in the portlet's application context, |
80 | | - * implementing the HandlerMapping interface, overriding the default HandlerMapping if present. |
81 | | - * HandlerMappings can be given any bean name (they are tested by type). |
| 79 | + * implementing the HandlerMapping interface, overriding the default HandlerMapping |
| 80 | + * if present. HandlerMappings can be given any bean name (they are tested by type). |
82 | 81 | * |
83 | 82 | * <li>It can use any {@link HandlerAdapter}; this allows for using any handler interface. |
84 | 83 | * The default adapter is {@link org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter} |
|
102 | 101 | * (they are tested by type). |
103 | 102 | * |
104 | 103 | * <li>The dispatcher's strategy for resolving multipart requests is determined by a |
105 | | - * {@link org.springframework.web.portlet.multipart.PortletMultipartResolver} implementation. |
106 | | - * An implementations for Jakarta Commons FileUpload is included: |
| 104 | + * {@link org.springframework.web.portlet.multipart.PortletMultipartResolver} |
| 105 | + * implementation. An implementations for Apache Commons FileUpload is included: |
107 | 106 | * {@link org.springframework.web.portlet.multipart.CommonsPortletMultipartResolver}. |
108 | 107 | * The MultipartResolver bean name is "portletMultipartResolver"; default is none. |
109 | 108 | * </ul> |
110 | 109 | * |
111 | | - * <p><b>NOTE: The {@code @RequestMapping} annotation will only be processed |
112 | | - * if a corresponding {@code HandlerMapping} (for type level annotations) |
113 | | - * and/or {@code HandlerAdapter} (for method level annotations) |
114 | | - * is present in the dispatcher.</b> This is the case by default. |
115 | | - * However, if you are defining custom {@code HandlerMappings} or |
116 | | - * {@code HandlerAdapters}, then you need to make sure that a |
117 | | - * corresponding custom {@code DefaultAnnotationHandlerMapping} |
118 | | - * and/or {@code AnnotationMethodHandlerAdapter} is defined as well |
119 | | - * - provided that you intend to use {@code @RequestMapping}. |
| 110 | + * <p><b>NOTE: The {@code @RequestMapping} annotation will only be processed if a |
| 111 | + * corresponding {@code HandlerMapping} (for type-level annotations) and/or |
| 112 | + * {@code HandlerAdapter} (for method-level annotations) is present in the dispatcher.</b> |
| 113 | + * This is the case by default. However, if you are defining custom {@code HandlerMappings} |
| 114 | + * or {@code HandlerAdapters}, then you need to make sure that a corresponding custom |
| 115 | + * {@code DefaultAnnotationHandlerMapping} and/or {@code AnnotationMethodHandlerAdapter} |
| 116 | + * is defined as well - provided that you intend to use {@code @RequestMapping}. |
120 | 117 | * |
121 | 118 | * <p><b>A web application can define any number of DispatcherPortlets.</b> |
122 | | - * Each portlet will operate in its own namespace, loading its own application |
123 | | - * context with mappings, handlers, etc. Only the root application context |
124 | | - * as loaded by {@link org.springframework.web.context.ContextLoaderListener}, |
125 | | - * if any, will be shared. |
| 119 | + * Each portlet will operate in its own namespace, loading its own application context |
| 120 | + * with mappings, handlers, etc. Only the root application context as loaded by |
| 121 | + * {@link org.springframework.web.context.ContextLoaderListener}, if any, will be shared. |
126 | 122 | * |
127 | 123 | * <p>Thanks to Rainer Schmitz, Nick Lothian and Eric Dalquist for their suggestions! |
128 | 124 | * |
@@ -401,7 +397,7 @@ private void initHandlerMappings(ApplicationContext context) { |
401 | 397 | if (!matchingBeans.isEmpty()) { |
402 | 398 | this.handlerMappings = new ArrayList<HandlerMapping>(matchingBeans.values()); |
403 | 399 | // We keep HandlerMappings in sorted order. |
404 | | - OrderComparator.sort(this.handlerMappings); |
| 400 | + AnnotationAwareOrderComparator.sort(this.handlerMappings); |
405 | 401 | } |
406 | 402 | } |
407 | 403 | else { |
@@ -439,7 +435,7 @@ private void initHandlerAdapters(ApplicationContext context) { |
439 | 435 | if (!matchingBeans.isEmpty()) { |
440 | 436 | this.handlerAdapters = new ArrayList<HandlerAdapter>(matchingBeans.values()); |
441 | 437 | // We keep HandlerAdapters in sorted order. |
442 | | - OrderComparator.sort(this.handlerAdapters); |
| 438 | + AnnotationAwareOrderComparator.sort(this.handlerAdapters); |
443 | 439 | } |
444 | 440 | } |
445 | 441 | else { |
@@ -477,7 +473,7 @@ private void initHandlerExceptionResolvers(ApplicationContext context) { |
477 | 473 | if (!matchingBeans.isEmpty()) { |
478 | 474 | this.handlerExceptionResolvers = new ArrayList<HandlerExceptionResolver>(matchingBeans.values()); |
479 | 475 | // We keep HandlerExceptionResolvers in sorted order. |
480 | | - OrderComparator.sort(this.handlerExceptionResolvers); |
| 476 | + AnnotationAwareOrderComparator.sort(this.handlerExceptionResolvers); |
481 | 477 | } |
482 | 478 | } |
483 | 479 | else { |
@@ -516,7 +512,7 @@ private void initViewResolvers(ApplicationContext context) { |
516 | 512 | if (!matchingBeans.isEmpty()) { |
517 | 513 | this.viewResolvers = new ArrayList<ViewResolver>(matchingBeans.values()); |
518 | 514 | // We keep ViewResolvers in sorted order. |
519 | | - OrderComparator.sort(this.viewResolvers); |
| 515 | + AnnotationAwareOrderComparator.sort(this.viewResolvers); |
520 | 516 | } |
521 | 517 | } |
522 | 518 | else { |
|
0 commit comments