面向方面编程基本概念

面向方面编程基本概念

ID:20357104

大小:31.50 KB

页数:9页

时间:2018-10-11

面向方面编程基本概念_第1页
面向方面编程基本概念_第2页
面向方面编程基本概念_第3页
面向方面编程基本概念_第4页
面向方面编程基本概念_第5页
资源描述:

《面向方面编程基本概念》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、面向方面编程的基本概念面向方面编程的基本概念天道酬勤发表于2005-11-411:13:00面向对象的编程中常用的概念是:继承、封装、多态。在面向方面的编程中常使用的概念是:advices/interceptors,introductions,metadata,andpointcuts。面向方面的编程思路很简单。从面向过程、函数的编程到面向对象的编程到面向接口的编程到面向组件、模块编程的发展历史我们可以知道,编程方法学的演进是一步一步的扩大了编程考虑的“边界”。到目前为止我们的编程世界里的宇宙边界是“类、接口,或者组件”,在这个边界里,

2、我们认为,一个类实现一个接口,那就不能动态的实现另一个接口,已有类的行为在编译以前就基本固定,要么是类内部定义的方法,要么是要么是继承和实现接口继承过来的方法。但是实际的编程工作中我们碰到了“跨边界的情况”,需要多个类,接口,组件合作才能完成的工作,比如:多线程并发访问,程序流集中控制,序列化和程序状态保持,以及需要多个“类、接口、组件边界”共同参于才能完成的工作。为了更好的处理多个边界共同完成同一方面的工作,面向方面的编程出现了。这里的方面,我们可以指:为完成同一任务而需要多个类、接口、组件一起协作工作的综合。你可以认为方面其实就是一

3、个更大的类,这个类主要由我们OOP中的类、接口组成,当然这些类和接口是如此的亲密,以至于他们行为(方法)可以相互转换。其实这没什么大不了的,接口的出现不是实现了动态的改变类的行为的吗?面向方面的编程只是做了一个延伸,把这个改变提升到了接口这个层次上。写到这里,我感到:耳朵清静了,但是世界还没有清静,因为到实际的运用这种思路编程,还需要很长的时间,和更多工具开发商的支持。Advices/Interceptors(消息传达/消息拦截)一个“传达的消息”是一个被特定事件触发发的逻辑(代码)。这个“传达的消息”可以被插入到一个调用者和被调用者队

4、列之间。可以说:传达消息是面向方面的编程的一个关键组成部份。Introductions(成员推荐)Introductions是用来向已有的类增加方法和属性的一个方法。使用成员推荐你可以把一个现有类实现的接口“介绍”到另一个新的接口中。大家知道,接口的出现就是为了把定义和实现分开,现在使用面向方面的编程,可以做到动态改变既有类的接口,太不可思议了。在java编程中使用“成员推荐”你可以做到让一个java类实现多重继承。也就是说,使用“成员推荐”你可以在程序运行的时候来动态改变类的接口,实现不同的行为。就像孙悟空可以不断变换自己的行为,但是

5、这个孙悟空必须有三个毫毛(被“成员推荐”)。看下面的例子:Appleapple=newApple();LoggingAPIlogging=(LoggingAPI)apple;Apple.setLoggingLevel(VERBOSE);使用“成员推荐”:Apple可以动态的拥有log的功能了。Metadata(元数据)元数据是用来描述类本身的一些附加信息和其描述类捆绑在一起,可以静态的或者再运行的时刻获得这些类的描述信息。例子参见我的另一片文章(使用反射机制实现动态工厂模式)。EJB中就使用了大量的Metadata。Pointcuts如

6、果说:interceptors,introductions,andmetadata是面向方面编程的特点的话,那么pointcutsare就是连接他们在一起的“胶水”。Pointcuts是运行在AOP框架,比如:告诉框架如何确认消息传达、元数据是如何在类中定义的、那些类、接口被“成员推荐”了等等。Jboss4.0中的AOP框架Jboss4.0提供了AOP框架,这个框架是和Jboss应用服务器紧密集成的,但是也可以独立运行。下面我们看看基于AOP编程的基本过程:1、定义“消息拦截器”InterceptorJboss提供了一个消息拦截器的接口

7、,如下:publicinterfaceInterceptor{publicStringgetName();publicInvocationResponseinvoke(Invocationinvocation)throwsThrowable;}值的一提的是:类中所有字段、构造函数、方法等的相关操作全部由“消息拦截器”拦截invoke,然后“打包”成一个Invocation对象,操作完成后返回IvvocationResponse对象。详见下例:importorg.jboss.aop.*;importjava.lang.reflect.*;

8、publicclassTracingInterceptorimplementsInterceptor{publicStringgetName(){returnTracingInterceptor;}publ

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。