Spring MVC 拦截器

spring 拦截器
1.firstIntercept
2.secondIntercept
配置文件
我默认用注解

<bean id="messageSource"
		class="org.springframework.context.support.ResourceBundleMessageSource">
		<!--value属性的值是你存放国际化信息的文件名的前缀,basename 表是单数 -->
		<property name="basename" value="messages"></property>
		<!-- <property name="basenames"> <list> <value>messages</value> </list> 
			</property> -->

		<property name="useCodeAsDefaultMessage" value="true" />

</bean>
<bean id="localeResolver"

		class="org.springframework.web.servlet.i18n.CookieLocaleResolver">

		<property name="defaultLocale" value="en" /><!---->默认国际化语言是英文
</bean>
<bean id="localeChangeInterceptor"

		class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">

		<property name="paramName" value="lang" />
		<!-- lang=ja_JP_ //日文 lang=zh //中文 lang=en //英文 -->
</bean>

<bean 
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
</bean>

<bean id="firstIntercept" class="cn.easier.interceptor.FirstIntercept"/>
<bean id="secondIntercept" class="cn.easier.interceptor.SecondIntercept"></bean>

<bean id="handlerMapping"

		class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">

		<property name="interceptors">
				<list>
					  <ref bean="localeChangeInterceptor"/>  <!--国际化拦截器-->
					  <ref bean="firstIntercept"/>
					   <ref bean="SecondIntercept"/>
				</list>
			 
		</property>
		
</bean>
运行顺序
 1、两个都返回true
如果(firstIntercept)第一个拦截器中的preHandler方法返回true
就(SecodeIntecept)执行下一个拦截器的preHandler方法也返回true,再以此类推..

firstIntercept...preHandler
SecodeIntecept...preHandler

save  //这是control里面去了,表示上面两个拦截器都返回true了

SecodeIntecept...postHandle
firstIntercept...postHandle

SecodeIntecept...afterCompletion
firstIntercept...afterCompletion

 2、第一个都返回false
firstIntercept...preHandler  //进入第一个拦截器的preHandler里面,就停止执行了,后面的拦截器都不会执行了

 3、第二个都返回false
firstIntercept...preHandler //进入第一个拦截器的preHandler里面,因为第一个拦截器返回true,进入第二个拦截器preHandler里面去了
SecodeIntecept...preHandler //进入第二个拦截器preHandler里,但是他返回false,所以停留在第二个拦截器里面了,

firstIntercept...afterCompletion  //但是他会执行第一个(firstIntercept)拦截器的afterCompletion方法

4.thirdIntercept  //第三个thirdIntercept 的preHandler方法为true时

firstIntercept...preHandler
SecodeIntecept...preHandler
thirdIntercept...preHandler

save  //这是control里面去了,表示上面两个拦截器都返回true了

SecodeIntecept...postHandle
firstIntercept...postHandle
thirdIntercept...postHandle

SecodeIntecept...afterCompletion
firstIntercept...afterCompletion
thirdIntercept...afterCompletion
//假如还有第三个
5.thirdIntercept  //第三个thirdIntercept 的preHandler方法为false时

firstIntercept...preHandler  //true
SecodeIntecept...preHandler //true
thirdIntercept...preHandler	//false  但是他会执行前一个拦截器的afterCompletion方法

SecodeIntecept...afterCompletion  //但是他会执行他前一个的前一个拦截器的afterCompletion方法
firstIntercept...afterCompletion 

 //没画图,那天画个图说说更详细  这也有个例子http://www.blogjava.net/wmcoo/articles/333752.html

你可能感兴趣的:(spring mvc)