美文网首页
Spring拦截器和SpringAop实现

Spring拦截器和SpringAop实现

作者: 丰极 | 来源:发表于2018-09-28 17:39 被阅读0次

一、拦截器

1、aop是面向切面编程,原理是java的发射技术。

2、分为三类,before、after、arround

3、springMvc为我们提供了一个适配器HandlerInterceptorAdapter,继承它实现我们自己的拦截器

4、HandlerInterceptorAdapter例子:

package com.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class BookInterceptor extends HandlerInterceptorAdapter {
    private static Logger Logger = LoggerFactory.getLogger(BookInterceptor.class);
    
    @Override
    public void afterCompletion(HttpServletRequest paramHttpServletRequest,HttpServletResponse paramHttpServletResponse, Object paramObject, Exception paramException)throws Exception {
    
    }
    
    @Override
    public void postHandle(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse,Object paramObject, ModelAndView paramModelAndView) throws Exception {
        String url = paramHttpServletRequest.getRequestURI();
        Logger.info("postMethod:" + url);
    }
    
    @Override
    public boolean preHandle(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse,Object paramObject) throws Exception {
        String url = paramHttpServletRequest.getRequestURI();
        Logger.info("preMehtod:" + url);
        return true;
    }
}

配置文件写在applicationContext.xml里面

<!--配置拦截器, 多个拦截器,顺序执行 -->
<mvc:interceptors>
    <mvc:interceptor><!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->
        <mvc:mapping path="/**" />
        <bean class="com.interceptor.BookInterceptor"></bean>
    </mvc:interceptor><!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
</mvc:interceptors>

二、完整的切点切面

1、@aspect例子(同时定义切面和切点)

package com.interceptor;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class BookAspect {

    private static final Logger logger = LoggerFactory.getLogger(BookAspect.class);

    @Pointcut("execution(* *.*List(..))")
    public void bookaspeck() {

    }

    @Before("bookaspeck()")
    public void bookbefore() {
        logger.info("before...");
    }

    @After("bookaspeck()")
    public void bookafter() {
        logger.info("after...");
    }
}

在applicationContext.xml中配置

<aop:aspectj-autoproxy/>

三、只有切面

1、MethodBeforeAdvice,AfterReturningAdvice只写切面,在配置文件里面定义切点

package com.interceptor;
import java.lang.reflect.Method;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
public class BookBeforeAdvice implements MethodBeforeAdvice,AfterReturningAdvice {

    private static Logger Logger = LoggerFactory.getLogger(BookBeforeAdvice.class);
    public void before(Method paramMethod, Object[] paramArrayOfObject, Object paramObject) throws Throwable {
        Logger.info("before...");
    }

    public void afterReturning(Object paramObject1, Method paramMethod, Object[] paramArrayOfObject,Object paramObject2) throws Throwable {
        Logger.info("after...");
    }
}

配置文件:

<bean id="bookBefore" class="com.interceptor.BookBeforeAdvice"/>
<bean id="regexpMethodPointcutAdvisor1" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">  
    <property name="advice" ref="bookBefore"/>  
    <property name="patterns" value=".*BookList">  
    </property>
</bean>
<bean  class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

<bean id="bookBefore" class="com.interceptor.BookBeforeAdvice"/>
<bean id="regexpMethodPointcutAdvisor1" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">  
    <property name="advice" ref="bookBefore"/>  
    <property name="patterns">  
        <list>  
            <value>com.book.control.TBookController.queryBookList</value>  
        </list>  
    </property>
</bean>
<bean  class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

相关文章

  • Spring拦截器和SpringAop实现

    一、拦截器 1、aop是面向切面编程,原理是java的发射技术。 2、分为三类,before、after、arro...

  • Spring15-拦截器

    定义拦截器 定义拦截器需要实现HandlerInterceptor 配置拦截器 注意:spring mvc的拦截器...

  • spring框架 AOP

    10、 代理模式 为什么要学习代理模式?因为这就是SpringAOP的底层!【SpringAOP 和 Spring...

  • springBoot—拦截器

    1. 拦截器的基本使用 1.1 拦截器的实现类 实现Spring的HandlerInterceptor接口; 继...

  • 38--SpringAop代理调用过程(二)

    引 接前面一章继续分析SpringAOP获取拦截器链和拦截器链的调用过程。 1.获取拦截器链 该段代码比较关键的点...

  • Spring知识点

    一、自定义拦截器 spring mvc拦截器和spring拦截器相比,它里面能够获取HttpServletRequ...

  • Spring Boot - 拦截器

    在Spring Boot项目中使用Spring MVC拦截器仅需简单2步就能实现。 以下内容以登录拦截器为例,介绍...

  • 在spring-boot工程中添加spring mvc拦截器

    1. 认识拦截器 Spring MVC的拦截器(Interceptor)不是Filter,同样可以实现请求的预处理...

  • springMVC自定义拦截器

    Spring MVC使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现Ha...

  • Spring Security Authentication (

    本质上讲,Spring Security 是通过过滤器(Filter)和拦截器(Interceptor)实现应用安...

网友评论

      本文标题:Spring拦截器和SpringAop实现

      本文链接:https://www.haomeiwen.com/subject/kuwpoftx.html