目录
前言
小伙伴们在学校学习的时候,是否遇到过许多的编程思想。面向对象,面向过程,面向切面...。学习java的小伙伴在学习面向对象、面向切面的时候是否感到过迷惑。也许过了许久后才反应过来,原来是这么回事。今天我在此记录下什么是面向切面编程,如有不当之处还望指出。谢谢!
一、什么是面向切面编程
AOP(Aspect Oriented Programming):面向切⾯编程,它是一种思想,是对某一类事情的集中处理。通过预编译和运行期间动态代理来实现程序功能的统一维护技术。
下面举个生活事例来说明一下面向切面,生活中大家都遇到过双方争执吧?甲方和乙方产生了争执,不断的争论一直得不到一个统一的意见。这个时候就需要丙方的切入,丙方的切入需要一个切入点产生一个切面隔离甲方和乙方的争执,然后由丙方从切入点参与进去来中和的集中处理甲方和乙方所争执的事情,从而得到一个合理的处理结果。这就是我理解的面向切面,即程序中的AOP。其中也说明了为什么使用AOP,即统一意见、统一处理问题。
二、java中常用的AOP思想场景
spring中的业务处理事务控制(transactionManager);
Spring Web MVC的拦截器(HandlerInterceptorAdapter);
JavaWeb中的过滤器(Filter);
...
以上这些都是常遇到的AOP编程思想的实现。
三、示例
大家是否还记得JSP开发中的登录实现,系统中是如何判断用户是否登录的,只有用户登录后才能访问相关的功能页面,否则重定向到登录页面。
实现思路是:用户进入登录页面进行登录,登录成功后将用户相关信息保存到session中。而后在JSP访问时就判断这个记录了用户信息的SESSION,如果有用户信息允许访问,如果为null就重定向到登录页面。这样的实现是很麻烦的,需要一个一个JSP页面做判断。
后来使用servlet,然后引入了Filter,我们在定义的这个Filter中统一处理了上述中的登录验证流程。这样一来就不需要一个一个JSP页面做判断了,是不是方便了很多。这就是AOP(Aspect Oriented Programming)面向切⾯编程的魅力所在。
除了统一的用户登录判断之外,AOP 还可以实现:
系统中对日志的统一处理;
系统中对请求执行的跟踪处理;
系统中的统一编码处理;
系统中的统一异常处理等...
好了!谢谢大家,关于对AOP的浅谈就到这里。关于具体的应用后续文章应该会有体现。