如何理解面向切面编程?

问题描述

如何理解面向切面编程?

什么才是面向切面?怎么理解?实际编程中该如何思考?程序中体现在什么地方?

解决方案

其实这不过是一个热炒的概念,说的很故弄玄虚,其实真正应用场景有限。常见的场景只有两个,一个是权限的判断,一个是日志的记录。你编写很多业务逻辑,都需要在代码上增加这些类似的重复的代码。
我们希望把这些前置后置的重复的代码从业务中提取出来,放在单独的地方只写一次,实现这样功能的框架被冠以一个名词就是AOP。

解决方案二:

首先面向切面编程是什么。
就指是把逻辑代码和处理琐碎事务的代码分离开,以便能够分离复杂度。
让人在同一时间只用思考代码逻辑,或者琐碎事务。
代码逻辑比如是插入一条数据,那么琐碎事务就包括获取连接和关闭连接,事务开始,事务提交。
切面就是指在大堆繁琐事务中的逻辑代码。

然后举个例子:
先假设你有一段逻辑代码要写~ 在这段代码之前要写log;代码完成之后要写log。结局就是一大堆的log代码就淹没了逻辑代码。
aop的想法就是将非逻辑部分的代码抽离出来,只考虑逻辑代码就行了,我把框框画好,这里写前面的log,这里写逻辑,这里写后面的log。
事实上用着嘛~ 我没用过。逻辑代码好像和非逻辑代码是分开在不同文件的。个人觉得跳文件也很烦躁。
感觉应该是系统大到某种程度才会需要这么严格的复杂度控制吧。

--------------------------无责任吐槽分割线--------------------------
(本故事纯属虚构,如有雷同纯属巧合)
虽然我没用过,但是突然想到我曾经在某个系统里见过这货。这个系统是这样的,使用了aop,将数据库的事务管理啊什么的都搞定了封印了。 但是,这个系统的log语句没有被封印,逻辑代码都还被logger.log("xxxxx")这样的语句给包围着。 如果说一个函数的话,可能就是有一半在做log,一个类有一半在做log。就算框架给框框画好了要用aop,也有人有办法不用,或者用不好。
其实不用aop的框架的话,也可以把前面和后面的琐碎事务自己抽象一下也能分开,这虽然不用框架但是也有aop的意思,就把琐碎事务都压缩到一个前置函数和一个后置函数里面。

解决方案三:

面向切面编程

AOP

Aspect?Oriented?Program
的首字母缩写)
?
,我们知道,面向对象的
特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中
往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一
个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
??
??????
但是人......
答案就在这里:面向切面编程 理解

时间: 2024-08-02 18:26:37

如何理解面向切面编程?的相关文章

面向切面编程(AOP)的理解

  在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录.事务控制及权限控制等,然后才是编写核心的业务逻辑处理代码.当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心业务逻辑处理才那么几行,如图6-4所示.方法复方法,类复类,就这样子带着无可奈何遗憾地度过了多少个春秋.这倒也罢,倘若到了项目的尾声,突然决定在权限控制上需要进行大的变动时,成千上万个方法又得一一"登门拜访",痛苦"雪上加霜". 如果能把图6-4中众多方法中的所有共

面向切面编程(AOP)的理解_javascript技巧

在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录.事务控制及权限控制等,然后才是编写核心的业务逻辑处理代码.当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心业务逻辑处理才那么几行,如图6-4所示.方法复方法,类复类,就这样子带着无可奈何遗憾地度过了多少个春秋.这倒也罢,倘若到了项目的尾声,突然决定在权限控制上需要进行大的变动时,成千上万个方法又得一一"登门拜访",痛苦"雪上加霜". 如果能把图6-4中众多方法中的所有共有代

Python的装饰器模式与面向切面编程详解

  这篇文章主要介绍了Python的装饰器模式与面向切面编程详解,概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能,本文详细了装饰器模式的方方面面,然后引出面向切面编程知识,需要的朋友可以参考下 今天来讨论一下装饰器.装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 1

yui3的AOP(面向切面编程)和OOP(面向对象编程)

  这篇文章主要介绍了yui3的AOP(面向切面编程)和OOP(面向对象编程),需要的朋友可以参考下 首先请把手放胸前成沉思状:我上了生活,还是被生活上了自己? 没想出答案把,恩,可以读下文了.从语义角度讲,同一事物的不同表述可以反映人的主观视角的不同,从哲学角度将,世界观影响方法论,我们看事物的角度不同,有时会得出截然相悖的结论,从而会影响我们的做事方式和行为准则,现实生活如此,在丰富多彩的编程语言中更是如此,编程模式充满了对现实世界的各种模拟,包括是面向过程,面向对象,还有面向切面.我们大概

Java实现AOP面向切面编程的实例教程_java

介绍 众所周知,AOP(面向切面编程)是Spring框架的特色功能之一.通过设置横切关注点(cross cutting concerns),AOP提供了极高的扩展性.那AOP在Spring中是怎样运作的呢?当你只能使用core java,却需要AOP技术时,这个问题的解答变得极为关键.不仅如此,在高级技术岗位的面试中,此类问题也常作为考题出现.这不,我的朋友最近参加了一个面试,就被问到了这样一个棘手的问题--如何在不使用Spring及相关库,只用core Java的条件下实现AOP.因此,我将在

依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦(转good)

依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦.所谓横切关注点,即影响应用多处的功能,这些功能各个应用模块都需要,但又不是其主要关注点,常见的横切关注点有日志.事务和安全等. 将横切关注点抽离形成独立的类,即形成了切面.切面主要由切点和通知构成,通知定义了切面是什么,以及何时执行何种操作:切点定义了在何处执行通知定义的操作. http://ju.outofmemory.cn/entry/216839 引子: AOP(面向方面编程:Asp

Spring AOP是怎么面向切面编程的

问题描述 SpringAOP面型切面编程是一个怎么样的实现机制,为什么要面向切面编程 解决方案 解决方案二:有:事前事中事后比如事前A网站每个页面都要用户验证,我把用户验证用AOP写,页面里就不写了.能达到也正用户是否合法.解决方案三:现象切面编程,意思就是在不改变源代码的情况下增加代码,那怎么做呢,就是用代理,在代理类里调用被代理类的方法,大概是这个样子!解决方案四:掌握AOP之前,需要先了解一下动态代理.动态代理一般分为两种,一种是在运行期织入,另一种是在编译期织入.运行期织入的实现有JDK

Javascript aop(面向切面编程)之around(环绕)

Aop又叫面向切面编程,其中"通知"是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点.但是利用aop可以有效的改善js代码逻辑,比如前端框架dojo和yui3中AOP则被提升至自定义事件的一种内在机制,在源码中随处可见.得益于这种抽象使得dojo的自定义事件异常强大和灵活.dojo中aop的实现在dojo/aspect模块中,主要有三个方法:before.

Spring实战4—面向切面编程

主要内容 面向切面编程的基本知识 为POJO创建切面 使用@AspectJ注解 为AspectJ的aspects注入依赖关系 在南方没有暖气的冬天,太冷了,非常想念北方有暖气的冬天.为了取暖,很多朋友通过空调取暖,但是空调需要耗电,也就需要交不少电费.没家都会有一个电表,每隔一段时间都会有记录员来家里收取这段时间的电费. 现在做个假设:去掉电表和电费收取员,因此也没有人定期来家里收电费.这时就需要我们隔段时间主动去电力公司交电费,尽管会有执着的家庭主妇会认真得记录每个月各个电器用了多少度电,并计