当前位置: 首页 > news >正文

什么是AOP(面向切面编程)

目录

前言

一、什么是面向切面编程

二、java中常用的AOP思想场景

三、示例


前言

小伙伴们在学校学习的时候,是否遇到过许多的编程思想。面向对象,面向过程,面向切面...。学习java的小伙伴在学习面向对象、面向切面的时候是否感到过迷惑。也许过了许久后才反应过来,原来是这么回事。今天我在此记录下什么是面向切面编程,如有不当之处还望指出。谢谢!


一、什么是面向切面编程

 AOP(Aspect Oriented Programming):面向切⾯编程,它是一种思想,是对某一类事情的集中处理。通过预编译和运行期间动态代理来实现程序功能的统一维护技术。

下面举个生活事例来说明一下面向切面,生活中大家都遇到过双方争执吧?甲方和乙方产生了争执,不断的争论一直得不到一个统一的意见。这个时候就需要丙方的切入,丙方的切入需要一个切入点产生一个切面隔离甲方和乙方的争执,然后由丙方从切入点参与进去来中和的集中处理甲方和乙方所争执的事情,从而得到一个合理的处理结果。这就是我理解的面向切面,即程序中的AOP。其中也说明了为什么使用AOP,即统一意见、统一处理问题。

二、java中常用的AOP思想场景

学习java的小伙伴都使用过spring吧?

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的浅谈就到这里。关于具体的应用后续文章应该会有体现。 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 一 lua学习笔记:概述
  • springboot酒店管理系统
  • C++类和对象2
  • 【单片机原理及应用】实验:数字秒表显示器
  • 24年7月-8月工作笔记整理(前端)
  • 惠中科技光伏清洗剂:科技创新引领绿色清洁新风尚
  • <数据集>车辆识别数据集<目标检测>
  • 详细阐述Android开发中常见的报错类型
  • .NetCore发布到IIS
  • MySQL高可用性实践指南
  • Efficient LoFTR论文阅读(特征匹配)
  • RabbitMQ练习(Routing)
  • graphviz安装仍报错 | 路径问题 | 已解决
  • 前端项目运行汇总
  • mysql优化升级
  • 收藏网友的 源程序下载网
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 2017 年终总结 —— 在路上
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • co.js - 让异步代码同步化
  • JavaScript服务器推送技术之 WebSocket
  • PHP 小技巧
  • sublime配置文件
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 前端_面试
  • 前端临床手札——文件上传
  • 事件委托的小应用
  • 责任链模式的两种实现
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 如何正确理解,内页权重高于首页?
  • ​io --- 处理流的核心工具​
  • ​数据结构之初始二叉树(3)
  • ​用户画像从0到100的构建思路
  • # Panda3d 碰撞检测系统介绍
  • ()、[]、{}、(())、[[]]命令替换
  • (1)(1.11) SiK Radio v2(一)
  • (2)STL算法之元素计数
  • (LLM) 很笨
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (六)Hibernate的二级缓存
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)VC++中ondraw在什么时候调用的
  • (转载)虚函数剖析
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .Net Core中Quartz的使用方法
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net mvc部分视图
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET中winform传递参数至Url并获得返回值或文件