Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
1784df8d
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1784df8d
编写于
5月 13, 2011
作者:
R
Rossen Stoyanchev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
SPR-6996 Add mvc:interceptor bean references
上级
700a02b0
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
60 addition
and
37 deletion
+60
-37
org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/InterceptorsBeanDefinitionParser.java
.../web/servlet/config/InterceptorsBeanDefinitionParser.java
+13
-13
org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.1.xsd
...org/springframework/web/servlet/config/spring-mvc-3.1.xsd
+32
-14
org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
...springframework/web/servlet/config/MvcNamespaceTests.java
+8
-7
org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-interceptors.xml
...gframework/web/servlet/config/mvc-config-interceptors.xml
+7
-3
未找到文件。
org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/InterceptorsBeanDefinitionParser.java
浏览文件 @
1784df8d
...
...
@@ -19,7 +19,6 @@ package org.springframework.web.servlet.config;
import
java.util.List
;
import
org.springframework.beans.factory.config.BeanDefinition
;
import
org.springframework.beans.factory.config.BeanDefinitionHolder
;
import
org.springframework.beans.factory.parsing.BeanComponentDefinition
;
import
org.springframework.beans.factory.parsing.CompositeComponentDefinition
;
import
org.springframework.beans.factory.support.RootBeanDefinition
;
...
...
@@ -42,31 +41,32 @@ class InterceptorsBeanDefinitionParser implements BeanDefinitionParser {
CompositeComponentDefinition
compDefinition
=
new
CompositeComponentDefinition
(
element
.
getTagName
(),
parserContext
.
extractSource
(
element
));
parserContext
.
pushContainingComponent
(
compDefinition
);
List
<
Element
>
interceptors
=
DomUtils
.
getChildElementsByTagName
(
element
,
new
String
[]
{
"bean"
,
"interceptor"
});
List
<
Element
>
interceptors
=
DomUtils
.
getChildElementsByTagName
(
element
,
new
String
[]
{
"bean"
,
"
ref"
,
"
interceptor"
});
for
(
Element
interceptor
:
interceptors
)
{
RootBeanDefinition
mappedInterceptorDef
=
new
RootBeanDefinition
(
MappedInterceptor
.
class
);
mappedInterceptorDef
.
setSource
(
parserContext
.
extractSource
(
interceptor
));
mappedInterceptorDef
.
setRole
(
BeanDefinition
.
ROLE_INFRASTRUCTURE
);
String
[]
pathPatterns
;
BeanDefinitionHolder
interceptorDef
;
Object
interceptorBean
;
if
(
"interceptor"
.
equals
(
interceptor
.
getLocalName
()))
{
List
<
Element
>
paths
=
DomUtils
.
getChildElementsByTagName
(
interceptor
,
"mapping"
);
pathPatterns
=
new
String
[
paths
.
size
()];
for
(
int
i
=
0
;
i
<
paths
.
size
();
i
++)
{
pathPatterns
[
i
]
=
paths
.
get
(
i
).
getAttribute
(
"path"
);
}
Element
interceptorBean
=
DomUtils
.
getChildElementByTagName
(
interceptor
,
"bean"
);
interceptor
Def
=
parserContext
.
getDelegate
().
parseBeanDefinitionElement
(
interceptorBean
);
interceptorDef
=
parserContext
.
getDelegate
().
decorateBeanDefinitionIfRequired
(
interceptorBean
,
interceptorDef
);
}
else
{
Element
beanElem
=
DomUtils
.
getChildElementsByTagName
(
interceptor
,
new
String
[]
{
"bean"
,
"ref"
}).
get
(
0
);
interceptor
Bean
=
parserContext
.
getDelegate
().
parsePropertySubElement
(
beanElem
,
null
);
}
else
{
pathPatterns
=
null
;
interceptorDef
=
parserContext
.
getDelegate
().
parseBeanDefinitionElement
(
interceptor
);
interceptorDef
=
parserContext
.
getDelegate
().
decorateBeanDefinitionIfRequired
(
interceptor
,
interceptorDef
);
interceptorBean
=
parserContext
.
getDelegate
().
parsePropertySubElement
(
interceptor
,
null
);
}
mappedInterceptorDef
.
getConstructorArgumentValues
().
addIndexedArgumentValue
(
0
,
pathPatterns
);
mappedInterceptorDef
.
getConstructorArgumentValues
().
addIndexedArgumentValue
(
1
,
interceptorDef
);
String
mappedInterceptorName
=
parserContext
.
getReaderContext
().
registerWithGeneratedName
(
mappedInterceptorDef
);
parserContext
.
registerComponent
(
new
BeanComponentDefinition
(
mappedInterceptorDef
,
mappedInterceptorName
));
mappedInterceptorDef
.
getConstructorArgumentValues
().
addIndexedArgumentValue
(
1
,
interceptorBean
);
String
beanName
=
parserContext
.
getReaderContext
().
registerWithGeneratedName
(
mappedInterceptorDef
);
parserContext
.
registerComponent
(
new
BeanComponentDefinition
(
mappedInterceptorDef
,
beanName
));
}
parserContext
.
popAndRegisterContainingComponent
();
...
...
org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.1.xsd
浏览文件 @
1784df8d
...
...
@@ -223,13 +223,22 @@
</xsd:annotation>
<xsd:complexType>
<xsd:choice
maxOccurs=
"unbounded"
>
<xsd:choice>
<xsd:element
ref=
"beans:bean"
>
<xsd:annotation>
<xsd:documentation
source=
"java:org.springframework.web.servlet.handler.MappedInterceptor"
>
<![CDATA[
Registers an interceptor that intercepts every request regardless of its URI path.
<xsd:documentation>
<![CDATA[
Registers an interceptor that intercepts every request regardless of its URI path..
]]>
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element
ref=
"beans:ref"
>
<xsd:annotation>
<xsd:documentation>
<![CDATA[
Registers an interceptor that intercepts every request regardless of its URI path..
]]>
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:choice>
<xsd:element
name=
"interceptor"
>
<xsd:annotation>
<xsd:documentation
source=
"java:org.springframework.web.servlet.handler.MappedInterceptor"
>
<![CDATA[
...
...
@@ -250,6 +259,7 @@
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:choice>
<xsd:element
ref=
"beans:bean"
>
<xsd:annotation>
<xsd:documentation>
<![CDATA[
...
...
@@ -257,6 +267,14 @@
]]>
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element
ref=
"beans:ref"
>
<xsd:annotation>
<xsd:documentation>
<![CDATA[
A reference to an interceptor bean.
]]>
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
...
org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
浏览文件 @
1784df8d
...
...
@@ -179,7 +179,7 @@ public class MvcNamespaceTests {
@Test
public
void
testInterceptors
()
throws
Exception
{
loadBeanDefinitions
(
"mvc-config-interceptors.xml"
,
1
4
);
loadBeanDefinitions
(
"mvc-config-interceptors.xml"
,
1
6
);
RequestMappingHandlerMapping
mapping
=
appContext
.
getBean
(
RequestMappingHandlerMapping
.
class
);
assertNotNull
(
mapping
);
...
...
@@ -191,20 +191,21 @@ public class MvcNamespaceTests {
request
.
addParameter
(
"theme"
,
"green"
);
HandlerExecutionChain
chain
=
mapping
.
getHandler
(
request
);
assertEquals
(
3
,
chain
.
getInterceptors
().
length
);
assertEquals
(
4
,
chain
.
getInterceptors
().
length
);
assertTrue
(
chain
.
getInterceptors
()[
0
]
instanceof
ConversionServiceExposingInterceptor
);
assertTrue
(
chain
.
getInterceptors
()[
1
]
instanceof
LocaleChangeInterceptor
);
assertTrue
(
chain
.
getInterceptors
()[
2
]
instanceof
ThemeChangeInterceptor
);
assertTrue
(
chain
.
getInterceptors
()[
2
]
instanceof
WebRequestHandlerInterceptorAdapter
);
assertTrue
(
chain
.
getInterceptors
()[
3
]
instanceof
ThemeChangeInterceptor
);
request
.
setRequestURI
(
"/logged/accounts/12345"
);
chain
=
mapping
.
getHandler
(
request
);
assertEquals
(
4
,
chain
.
getInterceptors
().
length
);
assertTrue
(
chain
.
getInterceptors
()[
3
]
instanceof
WebRequestHandlerInterceptorAdapter
);
assertEquals
(
5
,
chain
.
getInterceptors
().
length
);
assertTrue
(
chain
.
getInterceptors
()[
4
]
instanceof
WebRequestHandlerInterceptorAdapter
);
request
.
setRequestURI
(
"/foo/logged"
);
chain
=
mapping
.
getHandler
(
request
);
assertEquals
(
4
,
chain
.
getInterceptors
().
length
);
assertTrue
(
chain
.
getInterceptors
()[
3
]
instanceof
WebRequestHandlerInterceptorAdapter
);
assertEquals
(
5
,
chain
.
getInterceptors
().
length
);
assertTrue
(
chain
.
getInterceptors
()[
4
]
instanceof
WebRequestHandlerInterceptorAdapter
);
}
@Test
...
...
org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-interceptors.xml
浏览文件 @
1784df8d
...
...
@@ -3,12 +3,13 @@
xmlns:mvc=
"http://www.springframework.org/schema/mvc"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.
0
.xsd"
>
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.
1
.xsd"
>
<mvc:annotation-driven
/>
<mvc:interceptors>
<bean
class=
"org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
/>
<ref
bean=
"log4jInterceptor"
/>
<mvc:interceptor>
<mvc:mapping
path=
"/**"
/>
<bean
class=
"org.springframework.web.servlet.theme.ThemeChangeInterceptor"
/>
...
...
@@ -16,8 +17,11 @@
<mvc:interceptor>
<mvc:mapping
path=
"/logged/**"
/>
<mvc:mapping
path=
"/foo/logged"
/>
<
bean
class=
"org.springframework.web.context.request.Log4jNestedDiagnosticContextInterceptor"
/>
<
ref
bean=
"log4jInterceptor"
/>
</mvc:interceptor>
</mvc:interceptors>
<bean
id=
"log4jInterceptor"
class=
"org.springframework.web.context.request.Log4jNestedDiagnosticContextInterceptor"
/>
</beans>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录