JAVA基础:Spring Aop、拦截器、过滤器的区别

- Filter过滤器:拦截web访问url地址。 这个比拦截器范围广,过滤器是大集合,拦截器是大集合中的小集合。而且任何url是先经过过滤器后才进入拦截器的。
- Interceptor拦截器:拦截url以action结尾或者没有后缀的,没有后缀拦截器会认为是.action结尾。。 如:struts2拦截器、spring拦截器
- Spring AOP拦截器:只能拦截Spring管理Bean的访问(业务层Service),就是说执行某个bean容器中方法时进行拦截,而不是对url。

过滤器配置在web.xml中,而拦截器是配置在框架中。

过滤器的配置(web.xml):

<filter>   
    <!-- 过滤器名称 -->
    <filter-name>loginFilter</filter-name>
    <!-- 过滤器的路径 -->
    <filter-class>com.ygj.control.loginFilter</filter-class>
  <!-- 可选 -->
	<init—param>      
	<!-- 过滤器初始化参数-->
      <param—name>参数名</param-name>
      <param-value>参数值</param-value> 
  </init—pamm> 
</filter>
 <!-- 过滤器映射 -->
<filter-mapping>
    <filter-name>loginFilter</filter-name> 
  <url—pattern>指定过滤器作用的对象</url-pattern>
</filter-mapping>

  

  拦截器,以springmvc为例配置在spring.xml:

<mvc:interceptors>  
   <!--  使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求   -->
    <!-- <bean class="com.bybo.aca.web.interceptor.Login"/> -->   
    <mvc:interceptor>  
        <!-- 进行拦截:/**表示拦截所有controller -->
        <mvc:mapping path="/**" />
       <!-- 不进行拦截 -->
        <mvc:exclude-mapping path="/index.html"/>
       
        <bean class="com.bybo.aca.web.interceptor.Login"/>  
    </mvc:interceptor>  
</mvc:interceptors>     

  springAOP

<!-- 配置切面类 -->
<bean id="myAspectXml" class="cn.itcast.spring.demo3.MyAspectXml"></bean>
<!-- 进行 aop 的配置 -->
<aop:config>
      <!-- 配置切入点表达式:哪些类的哪些方法需要进行增强,就是说执行某个方法进行拦截 -->
      <aop:pointcut  expression="execution(*cn.itcast.spring.demo.*Dao.save(..))" id="pointcut1"/>
      <aop:pointcut  expression="execution(*cn.itcast.spring.demo.*Dao.delete(..))" id="pointcut2"/>
      <aop:pointcut  expression="execution(*cn.itcast.spring.demo.*Dao.update(..))" id="pointcut3"/>
      <aop:pointcut  expression="execution(*cn.itcast.spring.demo.*Dao.find(..))" id="pointcut4"/>
      <!-- 配置切面 -->
      <!-- myAspectXml内含有before,afterReturing,around,afterThrowing,after方法-->
      <aop:aspect ref="myAspectXml">
      <!-- method是切面类调用的方法,pointcut-ref是拦截的方法 -->
          <aop:before method="before" pointcut-ref="pointcut1"/>
          <aop:after-returning  method="afterReturing"
pointcut-ref="pointcut2"/>
          <aop:around method="around" pointcut-ref="pointcut3"/>
          <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4"/>
          <aop:after method="after" pointcut-ref="pointcut4"/>
      </aop:aspect>
</aop:config>        

  

  

多一份坚持,少一份懒惰
原文地址:https://www.cnblogs.com/somelog/p/9293283.html