文档章节

【java基本】面向界面变成(AOP)的原理

卯金刀GG
 卯金刀GG
发布于 2018/04/14 17:55
字数 685
阅读 17
收藏 4

AOP原理:

动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

场景:

面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。
也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。
AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。

© 著作权归作者所有

卯金刀GG
粉丝 27
博文 261
码字总数 70945
作品 0
昌平
程序员
私信 提问
加载中

评论(1)

阿诺-舒华-辛力加
阿诺-舒华-辛力加
切面!切面!切面!吾日…
Android中AOP实践之一概念篇

预热 在说AOP之前先来说说java最经典的OOP(面向对象编程),我们通过面向对象的封装思想把同一类事物的共性归为一类中,方便我们统一管理。比如我们会把汽车的轮子,发动机,车身喷漆都放在...

LaxusJ
2017/11/12
0
0
dojo1.7功能介绍:面向方面编程(AOP)功能与原理

日前发布的dojo 1.7版本对其源码进行了很大的变更。在迈向2.0版本之际,dojo提供了许多新的功能,也对许多已有的功能进行了修改,具体来说新版本更好地支持AMD规范、提供了新的事件处理系统(...

bigYuan
2012/04/13
0
0
Spring AOP是什么?你都拿它做什么?

原文出处:我叫刘半仙 为什么会有面向切面编程(AOP)?我们知道Java是一个面向对象(OOP)的语言,但它有一些弊端,比如当我们需要为多个不具有继承关系的对象引入一个公共行为,例如日志、...

我叫刘半仙
01/12
0
0
AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)

1、我所知道的AOP 初看起来,上来就是一大堆的术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等。一下让你不知所措,心想着:管不得很多人都和我说AOP多难多难。当我...

iphoenix
2016/09/06
48
0
Spring|Spring AOP思想与配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/darlingwood2013/article/details/89467094 相关概念 AOP面向切面编程思想: 横向重复代码,纵向抽取。 过滤器...

叶晚林
04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark中map、mapPartitions、foreach、foreachPartitions算子

map 与 mapPartitions /** * Return a new RDD by applying a function to all elements of this RDD. */ def map[U: ClassTag](f: T => U): RDD[U] = withScope { val cleanF......

dreamness
8分钟前
0
0
spring boot 启动常见错误记录

1.错误: Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suit......

qimh
30分钟前
1
0
拥有有趣灵魂的程序员们,程序员访谈(一)

点击上方关注我们,让小care关爱你! 程序员群体一直都是低调多金的代表,而近段时间以来,程序员在网络上除了高薪之外,总是会和屌丝、苦逼、格子衫、没情趣...联系在一起。黑程序员的段子也...

ITCare
今天
33
0
Linux输入法fcitx的安装问题

Fcitx 总共要安装的包如下 fcitxfcitx-binfcitx-config-commonfcitx-config-gtk | fcitx-config-gtk2fcitx-datafcitx-frontend-allfcitx-frontend-gtk2fcitx-frontend-gtk3......

CHONGCHEN
今天
19
0
网络基础

前言: 最近整理一些以前的学习笔记(有部分缺失,会有些乱,日后再补)。 过去都是存储在本地,此次传到网络留待备用。 计算机网络的功能: 1.数据通信; 2.资源共享; 3.增加数据可靠性; 4....

迷失De挣扎
今天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部