面向切面(AOP)开发--SpringMVC-Mybatis-Maven项目整合(五)

18 篇文章 0 订阅
5 篇文章 0 订阅

前面的四篇文章,基本上已经把SpringMVC-Mybatis-Maven项目整合说清楚了,只需按照前面四篇文章来说的那样子配置,基本上都可以把这项目跑起来。

今天说说怎么在这个项目里面使用面向切面(AOP)吧。

其实面向切面的编程可以说是面向对象编程的一种补充吧。这种编程方法,可以解决一些相同的重复的事情。

 

在src下面新建me.idashu.attg.aop这个包。然后在包下,新建一个ControllerSelectorInterceptor类,写上下面代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Aspect
public class ControllerSelectorInterceptor {
     
     @Before ( "execution(* me.idashu.attg..*.*Controller.*Do(..,javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse))" )
     public void doBefore(JoinPoint jp) {
         Object[] args = jp.getArgs();
         HttpServletRequest request = (HttpServletRequest) args[args.length- 2 ];
         request.setAttribute( "aop" , "ok" );
         System.out.println( "before" );
     }
 
      @After ( "execution(* me.idashu.attg..*.*Controller.*Do(..,javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse))" )
      public void doAfter(JoinPoint jp) { 
         Object[] args = jp.getArgs();
         HttpServletRequest request = (HttpServletRequest) args[args.length- 2 ];
         String aop = (String) request.getAttribute( "aop" );
         System.out.println( "after " +aop);
      }
}

这样子,我们就配置好aop了。

@Aspect这个注解,就是说,这个类是一个切面,也就是用来处理相同的事情的一个类。

@Before("execution(* me.idashu.attg..*.*Controller.*Do(..,javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse))")这一句的意思就是在执行*Do()方法之前我要执行下面的doBefore方法。其实这里还有一些约束,就是这个*Do()方法,必须在me.idashu.attg这个包或者子包的下面,而且这个方法,在一个名叫*Controller的类里面。同时,这个方法的参数最后两个分别是javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResponse,也就是我们常用的request和response。

我这里的代码,其实就是说,在执行*Do()方法之前,先执行doBefore()方法。在这方法里面,先获取request,然后再里面放入一个名叫aop的变量。然后再执行完这个方法折后,程序会执行doAfter()方法。先获取request,然后冲request中取出aop变量,这样子我们就可以看到这两个方法有没有正确执行了。

好了,在这里,SpringMVC-Mybatis-Maven项目整合系列终于写完了,虽然水平确实不怎么样。但是希望对有兴趣的童鞋有点参考作用。

项目源码地址 http://images.idashu.me/sm.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值