文档章节

AOP(Aspect Oriented Programming) 面向方面编程

l
 liuhao_sh
发布于 2015/08/14 18:25
字数 1086
阅读 38
收藏 0
点赞 0
评论 0

AOPAspect Oriented Programming的简写,中文通常译作面向方面编程,其核心内容就是所谓的“横切关注点”。

我们知道,使用面向对象方法构建软件系统,我们可以利用OO的特性,很好的解决纵向的问题,因为,OO的核心概念,如继承等,都是纵向结构的。但是,在软件系统中,往往有很多模块,或者很多类共享某个行为,或者说,某个行为存

在于软件的各个部分中,这个行为可以看作是“横向”存在于软件之中,他所关注的是软件的各个部分的一些共有的行为,

而且,在很多情况下,这种行为不属于业务逻辑的一部分。例如,操作日志的记录,这种操作并不是业务逻辑调用的必须部

分,但是,我们却往往不得在代码中显式进行调用,并承担由此带来的后果(例如,当日志记录的接口发生变化时,不得不

对调用代码进行修改)。这种问题,使用传统的OO方法是很难解决的。AOP的目标,便是要将这些“横切关注点”与业务逻辑

代码相分离,从而得到更好的软件结构以及性能、稳定性等方面的好处。

AOP包含以下主要概念:
  Aspect方面:一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中横切关注点中一个很好的例子。
 Joinpoint连接点:程序执行过程中明确的点,如方法的调 用或特定的异常被抛出。
 Advice通知:在特定的连接点AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。
 Pointcut切入点:指定一个通知将被引发的一系列连接点 的集合。AOP框架必须允许开发者指定切入点:例如,使用正则表达式。
 Introduction引入:添加方法或字段到通知化类。
 IsModified接口,来简化缓存。
 Target object目标对象:包含连接点的对象。也被用来 引用通知化或代理化对象。
 AOP proxy AOP代理: AOP框架创建的对象,包含通知。 
 Weaving织入:组装方面创建通知化对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他一些纯Java AOP框架, 使用运行时织入。
各种通知类型包括:
 Around通知: 包围一个连接点的通知,如方法调用。这是最 强大的通知。Aroud通知在方法调用前后完成自定义的行为。它们负责选择继续执行连接点或直接返回它们自己的返回值或抛出异常来短路执行。
 Before通知: 在一个连接点之前执行的通知,但这个通知 不能阻止流程继续执行到连接点(除非它抛出一个异常)。
 Throws通知: 在方法抛出异常时执行的通知。
 After returning通知: 在连接点正常完成后执行的通知, 例如,如果一个方法正常返回,没有抛出异常。

  Around通知是最通用的通知类型。大部分基于拦截器的AOP框架如Nanning和JBoss4只提供 Around通知。
AOP,给我们的软件设计带来了一个新的视角和软件架构方法。使用AOP,我们可以专注于业务逻辑代码的编写,而将诸如日志记录、安全检测等系统功能交由AOP框架,在运行时刻自动耦合进来。

通常,我们可以在如下情景中使用AOP技术:

   Authentication 权限

 Caching 缓存

 Context passing 内容传递

 Error handling 错误处理

 Lazy loading 懒加载

 Debugging  调试

 logging, tracing, profiling and monitoring 记录跟踪 优化 校准

 Performance optimization 性能优化

 Persistence  持久化

 Resource pooling 资源池

 Synchronization 同步

 Transactions 事务

   Websharp实现了一个基于.Net的轻量级的AOP框架。

© 著作权归作者所有

共有 人打赏支持
l
粉丝 1
博文 36
码字总数 99860
作品 0
徐汇
SpringAOP应用在哪方面?它的作用是什么?

AOP:aspect oriented programming 被称为面向方面编程,面向方面编程主要关注的是共通部门的处理,把共通部分的逻辑封装成一个方面组件,该组件根据自己的需要可以切入到某一批目标对象方法中...

ForingY ⋅ 2016/03/01 ⋅ 0

在.NET项目中使用PostSharp,实现AOP面向切面编程处理

PostSharp是一种Aspect Oriented Programming 面向切面(或面向方面)的组件框架,适用在.NET开发中,本篇主要介绍Postsharp在.NET开发中的相关知识,以及一些如日志、缓存、事务处理、异常处...

walb呀 ⋅ 2017/12/04 ⋅ 0

Spring——AOP

AOP(Aspect Oriented Programming): 面向切面编程 面向切面编程是怎么回事呢?现在主流的开发语言主要都不发都采取OOP(Object Oriented Programming 面向对象);这个是我接触开发语言的...

天呀鲁哇 ⋅ 2014/12/30 ⋅ 0

spring 入门及IOC容器

Spring 一.Spring,原意“春天”,是一种轻量级容器框架,所谓轻量级就是依赖比较少,侵入性较低,其核心就是1. IOC(Inversion of Control)/DI(Dependency Injection)IoC的核心思想是通过消...

天国使者125 ⋅ 2013/06/15 ⋅ 0

一个简单的例子实现自己的AOP

AOP是Aspect Oriented Programming的缩写,意思是面向切面编程,与OOP(Object Oriented Programming)面向对象编程对等,都是一种编程思想。 从OOP角度分析,我们关注业务的处理逻辑,是属于纵...

java工会 ⋅ 05/16 ⋅ 0

AOP简单介绍

AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以...

邵鸿鑫 ⋅ 2016/05/30 ⋅ 0

Spring之AOP基础

名称含义 Aspect Oriented Programming(AOP)是较为热门的一个话题。AOP,国内大致译作“面向方面编程”。 “面向方面编程”,这样的名字并不是非常容易理解,且容易产生一些误导。笔者不止一...

白志华 ⋅ 2015/10/09 ⋅ 0

让我们面向切面吧~大话开篇

首先,感谢一下张逸老师,从他的文章中学到了很多面向对象和面向方面的知识。 AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)...

mcy247 ⋅ 2017/12/05 ⋅ 0

Android AOP编程

AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以...

山里来的鱼 ⋅ 2016/06/29 ⋅ 0

使用Spring Boot的AOP处理自定义注解

前言 上一篇文章Java 注解介绍讲解了下Java注解的基本使用方式,并且通过自定义注解实现了一个简单的测试工具;本篇文章将介绍如何使用Spring Boot的AOP来简化处理自定义注解,并将通过实现一...

craneyuan ⋅ 01/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 14分钟前 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 32分钟前 ⋅ 0

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 57分钟前 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 今天 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 今天 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 今天 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 今天 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 今天 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部