面向切面编程介绍:php
介绍:java
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特色是,他们常常发生在核心关注点的多处,而各处都基本类似。好比权限认证、日志、事务处理。Aop 的做用在于分离系统中的各类关注点,将核心关注点和横切关注点分离开来。正如Avanade公司的高级方案构架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法建立“方面”,从而使得编译器能够在编译期间织入有关“方面”的代码。*然而异曲同工,实现AOP的技术特性倒是相同的,分别为:编程
上述的技术特性组成了基本的AOP技术,大多数AOP工具均实现了这些技术。它们也能够是研究AOP技术的基本术语。安全
要点:
把模块做为一批关注点来实现架构
关注点识别:三棱镜法则工具
将横切关注点织入到核心关注点中this
为了创建松散耦合的、可扩展的企业系统,AOP应用到的横切技术,一般分为两种类型:动态横切和静态横切。
spa
动态横切是经过切入点和链接点在一个方面中建立行为的过程,链接点能够在执行时横向地应用于现有对象。动态横切一般用于帮助向对象层次中的各类方法添加日志记录或身份认证。在不少应用场景中,动态横切技术基本上表明了AOP。设计
AOP动态横切的技术实现3d
静态横切和动态横切的区别在于它不修改一个给定对象的执行行为。相反,它容许经过引入附加的方法字段和属性来修改对象的结构。此外,静态横切能够把扩展和实现附加到对象的基本结构中。在AOP实现中,一般将静态横切称为introduce或者mixin。
静态横切在AOP技术中,受到的关注相对较少。事实上,这一技术蕴含的潜力是巨大的。使用静态横切,架构师和设计者能用一种真正面向对象的方法有效地创建复杂系统的模型。静态横切容许您不用建立很深的层次结构,以一种本质上更优雅、更逼真于现实结构的方式,插入跨越整个系统的公共行为。尤为是当开发应用系统时,若是须要在不修改原有代码的前提下,引入第三方产品和API库,则静态横切技术将发挥巨大的做用。
实现:横切
java:实现:www.jianshu.com/p/a833d114099a
php 简单实例:
<?php //Object Data class User { private $name; //Join Point 链接点 function set_name( $value ) { $this->name = $value; } //Join Point 链接点 function get_name() { echo "COde......\n"; return $this->name; } } //Aspect 方面 class Logged { private $obj; //Point Cut 切入点 function __call( $method, $args ) { //Advice 通知 echo( "$method( ".join( ",", $args )." )\n" ); $cron = call_user_func_array(array(&$this->obj,$method),$args); echo( "$method( ".join( ",", $args )." )END--\n" ); return $cron; } function __construct( $obj ) { $this->obj = $obj; } } $c1 = new Logged( new User() ); $c1->set_name( "XuGuo" ); $name = $c1->get_name(); echo( "name = $name\n" );