文档章节

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

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

AOP原理:

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

场景:

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

© 著作权归作者所有

卯金刀GG
粉丝 27
博文 254
码字总数 68604
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

双因素认证绕过的钓鱼工具

研究人员发布了两个工具——Muraen和NecroBrowser。它们可以自动绕过2FA进行钓鱼攻击,大多数防御措施都无法抵御它们。 渗透测试人员和攻击者为他们的武器库添加了一个新的工具,这种工具可以...

Linux就该这么学
14分钟前
1
0
java代码和js两种方式判断浏览器是否是IE11

java代码判断浏览器是否是IE11 HttpServletRequest request = ServletActionContext.getRequest();String agent = request.getHeader("User-Agent");//判断是IE浏览器而且不是IE11的时......

平凡三度
17分钟前
1
0
2019 Vue开发指南:你都需要学点啥?

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://dzone.com/articles/vue-development-in-2019-what-you-need-to-know 如果...

葡萄城技术团队
19分钟前
0
0
[gitlab]登录页定制

Administrator - 设置 https://blog.csdn.net/weixin_43606948/article/details/85222755 支持markdown,用###...

Danni3
28分钟前
1
0
IT兄弟连 Java语法教程 编写Java源代码

现在我们来一步一步的编写第一个Java程序,鼎鼎大名的“HelloWorld”。 编写Java源代码 编写Java源代码可以使用任何无格式的文本编辑器,在Windows操作系统上可以使用记事本、Edit Plus等程序...

老码农的一亩三分地
42分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部