一、拦截器

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

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

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

4、HandlerInterceptorAdapter例子:

  1. package com.interceptor;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.web.servlet.ModelAndView;
  7. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
  8. public class BookInterceptor extends HandlerInterceptorAdapter {
  9. private static Logger Logger = LoggerFactory.getLogger(BookInterceptor.class);
  10. @Override
  11. public void afterCompletion(HttpServletRequest paramHttpServletRequest,HttpServletResponse paramHttpServletResponse, Object paramObject, Exception paramException)throws Exception {
  12. }
  13. @Override
  14. public void postHandle(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse,Object paramObject, ModelAndView paramModelAndView) throws Exception {
  15. String url = paramHttpServletRequest.getRequestURI();
  16. Logger.info("postMethod:" + url);
  17. }
  18. @Override
  19. public boolean preHandle(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse,Object paramObject) throws Exception {
  20. String url = paramHttpServletRequest.getRequestURI();
  21. Logger.info("preMehtod:" + url);
  22. return true;
  23. }
  24. }

配置文件写在applicationContext.xml里面

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

二、完整的切点切面

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

  1. package com.interceptor;
  2. import org.aspectj.lang.annotation.After;
  3. import org.aspectj.lang.annotation.Aspect;
  4. import org.aspectj.lang.annotation.Before;
  5. import org.aspectj.lang.annotation.Pointcut;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.stereotype.Component;
  9. @Component
  10. @Aspect
  11. public class BookAspect {
  12. private static final Logger logger = LoggerFactory.getLogger(BookAspect.class);
  13. @Pointcut("execution(* *.*List(..))")
  14. public void bookaspeck() {
  15. }
  16. @Before("bookaspeck()")
  17. public void bookbefore() {
  18. logger.info("before...");
  19. }
  20. @After("bookaspeck()")
  21. public void bookafter() {
  22. logger.info("after...");
  23. }
  24. }

在applicationContext.xml中配置

  1. <aop:aspectj-autoproxy/>

三、只有切面

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

  1. package com.interceptor;
  2. import java.lang.reflect.Method;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.aop.AfterReturningAdvice;
  6. import org.springframework.aop.MethodBeforeAdvice;
  7. public class BookBeforeAdvice implements MethodBeforeAdvice,AfterReturningAdvice {
  8. private static Logger Logger = LoggerFactory.getLogger(BookBeforeAdvice.class);
  9. public void before(Method paramMethod, Object[] paramArrayOfObject, Object paramObject) throws Throwable {
  10. Logger.info("before...");
  11. }
  12. public void afterReturning(Object paramObject1, Method paramMethod, Object[] paramArrayOfObject,Object paramObject2) throws Throwable {
  13. Logger.info("after...");
  14. }
  15. }

配置文件:

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

  1. <bean id="bookBefore" class="com.interceptor.BookBeforeAdvice"/>
  2. <bean id="regexpMethodPointcutAdvisor1" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> 
  3. <property name="advice" ref="bookBefore"/> 
  4. <property name="patterns"> 
  5. <list> 
  6. <value>com.book.control.TBookController.queryBookList</value> 
  7. </list> 
  8. </property>
  9. </bean>
  10. <bean  class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

Spring拦截器和SpringAop实现的更多相关文章

  1. Spring拦截器中通过request获取到该请求对应Controller中的method对象

    背景:项目使用Spring 3.1.0.RELEASE,从dao到Controller层全部是基于注解配置.我的需求是想在自定义的Spring拦截器中通过request获取到该请求对应于Control ...

  2. spring拦截器中修改响应消息头

    问题描述 前后端分离的项目,前端使用Vue,后端使用Spring MVC. 显然,需要解决浏览器跨域访问数据限制的问题,在此使用CROS协议解决. 由于该项目我在中期加入的,主要负责集成shiro框架 ...

  3. Spring 拦截器实现+后台原理(HandlerInterceptor)

    过滤器跟拦截器的区别 spring mvc的拦截器是只拦截controller而不拦截jsp,html 页面文件的.这就用到过滤器filter了,filter是在servlet前执行的,你也可以理解成 ...

  4. Spring拦截器和过滤器

    什么是拦截器 拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略.它通过动态拦截Action调用的对象,允许开发者 ...

  5. Spring 拦截器——HandlerInterceptor

    采用Spring拦截器的方式进行业务处理.HandlerInterceptor拦截器常见的用途有: 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2 ...

  6. spring 拦截器简介

    spring 拦截器简介 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等.2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直 ...

  7. Spring 拦截器配置

    Spring interceptor拦截器配置 Spring mvc的拦截器是通过handlerinterceptor来实现的 实现方式: 1.自定义一个类实现Spring的handlerinterc ...

  8. spring拦截器的定义

    (一).拦截器的定义 1.为什么需要拦截器:在做身份认证或者是进行日志的记录时,我们需要通过拦截器达到我们的目的 2.什么事拦截器:在AOP(Aspect-Oriented Programming)中 ...

  9. Spring 拦截器实现事物

    Spring+Hibernate的实质:就是把Hibernate用到的数据源Datasource,Hibernate的SessionFactory实例,事务管理器HibernateTransactio ...

随机推荐

  1. 美女面试官问我Python如何优雅的创建临时文件,我的回答....

    [摘要] 本故事纯属虚构,如有巧合,他们故事里的美女面试官也肯定没有我的美,请自行脑补... 小P像多数Python自学者一样,苦心钻研小半年,一朝出师投简历. 这不,一家招聘初级Python开发工程 ...

  2. centos7 安装配置apache

    1.在安装apache yum install httpd 2.启动测试 systemctl  start httpd // restart (重启) 3.查看运行状态 service httpd s ...

  3. Linux系统调用和ANSI C文件操作的区别

    一.在Linux下对文件操作有两种方式:Linux系统调用和ANSI C文件操作. 1.Linux系统调用调用常用于I/O文件操作,系统调用常用的函数有open.close.read.write.ls ...

  4. 06.Django-用户认证

    用户认证 Django 内置一个 auth 模块,帮助用户实现注册.登录.注销以及修改密码等功能,帮助开发者省去了很多功夫 用于认证的数据表 auth_user User是auth模块中维护用户信息的 ...

  5. Cypress系列(16)- 查找页面元素的基本方法

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前端页面代码 后面写的 Cypress ...

  6. PMBOK 基础知识(1)

    启动.结束过程 项目管理计划 第一章  引论 第2章项目运行环境 第3章 项目经理的角色 第4章 项目整合管理 第5章 项目范围管理 第6章 项目进度管理 第7章 项目成本管理 第8章 项目质量管理  ...

  7. 【shell】十分钟轻松入门;如果没入门,您吐口口水再走吧!

    一.什么是shell? Shell是什么? 1.Shell 是一个程序,Linux默认是用bash. Shell 是一个用 C 语言编写的程序,既是一种命令语言,又是一种程序设计语言,是用户使用Lin ...

  8. sql server 取多条数据的最大值

    实列: SELECT a.BillDate '[开票时间]', a.Hdbh '[运单号]', a.Status '运单状态', a.DisplayStatus '运单状态字', b.name '开票 ...

  9. 数据库连接池 Druid和C3p0

    datasource.properties数据源 #数据源 datasource.peoperties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc: ...

  10. [CF696D]Legen...

    题目   点这里看题目. 分析   首先对于模式串建立 AC 自动机,并且计算出每个状态\(p\)的贡献总和\(con(p)\).   考虑一个朴素的 DP :   \(f(i,p)\):当前串长度为 ...