﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-闲人野居-随笔分类-设计相关</title><link>http://www.blogjava.net/zyl/category/14525.html</link><description>好好学习，天天向上</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 19:54:51 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 19:54:51 GMT</pubDate><ttl>60</ttl><item><title>理解AOP</title><link>http://www.blogjava.net/zyl/archive/2006/09/06/68113.html</link><dc:creator>布衣郎</dc:creator><author>布衣郎</author><pubDate>Wed, 06 Sep 2006 12:05:00 GMT</pubDate><guid>http://www.blogjava.net/zyl/archive/2006/09/06/68113.html</guid><wfw:comment>http://www.blogjava.net/zyl/comments/68113.html</wfw:comment><comments>http://www.blogjava.net/zyl/archive/2006/09/06/68113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zyl/comments/commentRss/68113.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zyl/services/trackbacks/68113.html</trackback:ping><description><![CDATA[         AOP这个概念提出来很久了，可对它总是一知半解。这几天好好补了一下其中的知识，终于有所突破。<br />         简单的来说,AOP就是面向方面（aspect)编程。具体的概念是这样的：<br />         面向 Aspect 的编程（AOP）是一种新的编程技术，它允许程序员对 <i>横切关系（crosscutting concerns）</i>（跨越典型职责界限的行为，例如日志记录）进行模块化。AOP 引进了 <i>Aspect，</i>它将影响多个类的行为封装到一个可重用模块中。<br />         那<a name="IDA0ESCC"><span class="atitle"><strong><font size="4">什么是横切？</font></strong></span></a><i> <br />        横切</i> 是面向方面编程的专有名词。它指的是在一个给定的编程模型中穿越既定的职责部分（比如日志记录和性能优化）的操作。在横切的世界里，横切有两种类型：动态横切和静态横切。<br />        <a name="IDABFSCC"><span class="smalltitle"><strong>动态横切</strong></span></a><i><br />       动态横切</i> 是通过 <i>切入点</i> 和 <i>连接点</i> 在一个 <i>方面</i> 中创建行为的过程，连接点可以在执行时横向地应用于现有对象。动态横切通常用于帮助向对象层次中的各种方法添加日志记录或身份认证。下面让我们花点时间了解一下动态横切中的一些实际概念： 
<ul><li><b>方面（aspect）</b>类似于 Java 编程语言中的类。方面定义切入点和通知（advice），并由诸如 AspectJ 这样的方面编译器来编译，以便将横切（包括动态的和静态的）织入（interweave）现有的对象中。 <br /><br /></li><li>一个 <b>连接点（join point）</b> 是程序执行中一个精确执行点，比如类中的一个方法。例如，对象 <code><font face="Courier" size="2">Foo </font></code>中的方法 <code><font face="Courier" size="2">bar()</font></code> 就可以是一个连接点。 <i>连接点</i>是个抽象的概念；不用主动定义一个连接点。 <br /><br /></li><li>一个 <b>切入点（pointcut）</b> 本质上一个用于捕捉连接点的结构。例如，可以定义一个切入点来捕捉对对象 <code><font face="Courier" size="2">Foo </font></code>中的方法 <code><font face="Courier" size="2">bar()</font></code> 的所有调用。和连接点相反，切入点需要在方面中定义。 <br /><br /></li><li><b>通知（advice）</b> 是切入点的可执行代码。一个经常定义的通知是添加日志记录功能，其中切入点捕捉对对象 <code><font face="Courier" size="2">Foo </font></code>中的 <code><font face="Courier" size="2">bar()</font></code> 的每个调用，然后该通知动态地插入一些日志记录功能，比如捕捉 <code><font face="Courier" size="2">bar()</font></code> 的参数。 </li></ul><p>       这些概念是动态横切的核心，虽然正如我们即将看到的，它们并不全都是静态横切所必需的。<br /><br />       <a name="IDAZCSCC"><span class="smalltitle"><strong>静态横切</strong></span></a></p><p><i>     静态横切</i> 和动态横切的区别在于它不修改一个给定对象的执行行为。相反，它允许通过引入附加的方法字段和属性来修改对象的 <i>结构</i>。此外，静态横切可以把扩展和实现附加到对象的基本结构中。 <br />    虽然现在还无法谈及静态横切的普遍使用——它看起来是 AOP 的一个相对未被探索（尽管非常具有吸引力）的特性——然而这一技术蕴含的潜力是巨大的。使用静态横切，架构师和设计者能用一种真正面向对象的方法有效地建立复杂系统的模型。静态横切允许您不用创建很深的层次结构，以一种本质上更优雅、更逼真于现实结构的方式，插入跨越整个系统的公共行为。</p><p>       </p><img src ="http://www.blogjava.net/zyl/aggbug/68113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zyl/" target="_blank">布衣郎</a> 2006-09-06 20:05 <a href="http://www.blogjava.net/zyl/archive/2006/09/06/68113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>