1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.web.servlet.config;
18
19 import org.springframework.beans.factory.config.BeanDefinition;
20 import org.springframework.beans.factory.config.RuntimeBeanReference;
21 import org.springframework.beans.factory.parsing.BeanComponentDefinition;
22 import org.springframework.beans.factory.support.RootBeanDefinition;
23 import org.springframework.beans.factory.xml.ParserContext;
24 import org.springframework.util.AntPathMatcher;
25 import org.springframework.util.PathMatcher;
26 import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
27 import org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter;
28 import org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter;
29 import org.springframework.web.util.UrlPathHelper;
30
31
32
33
34
35
36
37
38 abstract class MvcNamespaceUtils {
39
40 private static final String BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME =
41 BeanNameUrlHandlerMapping.class.getName();
42
43 private static final String SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME =
44 SimpleControllerHandlerAdapter.class.getName();
45
46 private static final String HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME =
47 HttpRequestHandlerAdapter.class.getName();
48
49 private static final String URL_PATH_HELPER_BEAN_NAME = "mvcUrlPathHelper";
50
51 private static final String PATH_MATCHER_BEAN_NAME = "mvcPathMatcher";
52
53
54 public static void registerDefaultComponents(ParserContext parserContext, Object source) {
55 registerBeanNameUrlHandlerMapping(parserContext, source);
56 registerHttpRequestHandlerAdapter(parserContext, source);
57 registerSimpleControllerHandlerAdapter(parserContext, source);
58 }
59
60
61
62
63
64
65 public static RuntimeBeanReference registerUrlPathHelper(RuntimeBeanReference urlPathHelperRef, ParserContext parserContext, Object source) {
66 if (urlPathHelperRef != null) {
67 if (parserContext.getRegistry().isAlias(URL_PATH_HELPER_BEAN_NAME)) {
68 parserContext.getRegistry().removeAlias(URL_PATH_HELPER_BEAN_NAME);
69 }
70 parserContext.getRegistry().registerAlias(urlPathHelperRef.getBeanName(), URL_PATH_HELPER_BEAN_NAME);
71 }
72 else if (!parserContext.getRegistry().isAlias(URL_PATH_HELPER_BEAN_NAME)
73 && !parserContext.getRegistry().containsBeanDefinition(URL_PATH_HELPER_BEAN_NAME)) {
74 RootBeanDefinition urlPathHelperDef = new RootBeanDefinition(UrlPathHelper.class);
75 urlPathHelperDef.setSource(source);
76 urlPathHelperDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
77 parserContext.getRegistry().registerBeanDefinition(URL_PATH_HELPER_BEAN_NAME, urlPathHelperDef);
78 parserContext.registerComponent(new BeanComponentDefinition(urlPathHelperDef, URL_PATH_HELPER_BEAN_NAME));
79 }
80 return new RuntimeBeanReference(URL_PATH_HELPER_BEAN_NAME);
81 }
82
83
84
85
86
87
88 public static RuntimeBeanReference registerPathMatcher(RuntimeBeanReference pathMatcherRef, ParserContext parserContext, Object source) {
89 if (pathMatcherRef != null) {
90 if (parserContext.getRegistry().isAlias(PATH_MATCHER_BEAN_NAME)) {
91 parserContext.getRegistry().removeAlias(PATH_MATCHER_BEAN_NAME);
92 }
93 parserContext.getRegistry().registerAlias(pathMatcherRef.getBeanName(), PATH_MATCHER_BEAN_NAME);
94 }
95 else if (!parserContext.getRegistry().isAlias(PATH_MATCHER_BEAN_NAME)
96 && !parserContext.getRegistry().containsBeanDefinition(PATH_MATCHER_BEAN_NAME)) {
97 RootBeanDefinition pathMatcherDef = new RootBeanDefinition(AntPathMatcher.class);
98 pathMatcherDef.setSource(source);
99 pathMatcherDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
100 parserContext.getRegistry().registerBeanDefinition(PATH_MATCHER_BEAN_NAME, pathMatcherDef);
101 parserContext.registerComponent(new BeanComponentDefinition(pathMatcherDef, PATH_MATCHER_BEAN_NAME));
102 }
103 return new RuntimeBeanReference(PATH_MATCHER_BEAN_NAME);
104 }
105
106
107
108
109
110 private static void registerBeanNameUrlHandlerMapping(ParserContext parserContext, Object source) {
111 if (!parserContext.getRegistry().containsBeanDefinition(BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME)){
112 RootBeanDefinition beanNameMappingDef = new RootBeanDefinition(BeanNameUrlHandlerMapping.class);
113 beanNameMappingDef.setSource(source);
114 beanNameMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
115 beanNameMappingDef.getPropertyValues().add("order", 2);
116 parserContext.getRegistry().registerBeanDefinition(BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME, beanNameMappingDef);
117 parserContext.registerComponent(new BeanComponentDefinition(beanNameMappingDef, BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME));
118 }
119 }
120
121
122
123
124
125 private static void registerHttpRequestHandlerAdapter(ParserContext parserContext, Object source) {
126 if (!parserContext.getRegistry().containsBeanDefinition(HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME)) {
127 RootBeanDefinition handlerAdapterDef = new RootBeanDefinition(HttpRequestHandlerAdapter.class);
128 handlerAdapterDef.setSource(source);
129 handlerAdapterDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
130 parserContext.getRegistry().registerBeanDefinition(HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME, handlerAdapterDef);
131 parserContext.registerComponent(new BeanComponentDefinition(handlerAdapterDef, HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME));
132 }
133 }
134
135
136
137
138
139 private static void registerSimpleControllerHandlerAdapter(ParserContext parserContext, Object source) {
140 if (!parserContext.getRegistry().containsBeanDefinition(SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME)) {
141 RootBeanDefinition handlerAdapterDef = new RootBeanDefinition(SimpleControllerHandlerAdapter.class);
142 handlerAdapterDef.setSource(source);
143 handlerAdapterDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
144 parserContext.getRegistry().registerBeanDefinition(SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME, handlerAdapterDef);
145 parserContext.registerComponent(new BeanComponentDefinition(handlerAdapterDef, SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME));
146 }
147 }
148
149 }