java面向方面编程_面向方面编程的介绍----基本概念
面向对象的编程中常用的概念是:继承、封装、多态。在面向方面的编程中常使用的概念是:advices/interceptors, introductions, metadata, and pointcuts。
AOP 面向方面编程的介绍----基本概念(3)
面向方面的编程思路很简单。从面向过程、函数的编程到面向对象的编程到面向接口的编程到面向组件、模块编程的发展历史我们可以知道,编程方法学的演进是一步一步的扩大了编程考虑的“边界”。到目前为止我们的编程世界里的宇宙边界是“类、接口,或者组件”,在这个边界里,我们认为,一个类实现一个接口,那就不能动态的实现另一个接口,已有类的行为在编译以前就基本固定,要么是类内部定义的方法,要么是要么是继承和实现接口继承过来的方法。但是实际的编程工作中我们碰到了“跨边界的情况”,需要多个类,接口,组件合作才能完成的工作,比如:多线程并发访问,程序流集中控制,序列化和程序状态保持,以及需要多个“类、接口、组件边界”共同参于才能完成的工作。为了更好的处理多个边界共同完成同一方面的工作,面向方面的编程出现了。这里的方面,我们可以指:为完成同一任务而需要多个类、接口、组件一起协作工作的综合。你可以认为方面其实就是一个更大的类,这个类主要由我们OOP中的类、接口组成,当然这些类和接口是如此的亲密,以至于他们行为(方法)可以相互转换。其实这没什么大不了的,接口的出现不是实现了动态的改变类的行为的吗?面向方面的编程只是做了一个延伸,把这个改变提升到了接口这个层次上。写到这里,我感到:耳朵清静了,但是世界还没有清静,因为到实际的运用这种思路编程,还需要很长的时间,和更多工具开发商的支持。
在我以后的文章中我想统一下面的概念:
1、inter-type declarations 边界内部类型声明:Inter-type 声明在AspectJ中有很多种形式,使用他来描述类之间的关系、类本身成员和结构信息。
2、join point 连接点:连接点是在程序流程中定义的一个点。
4、crosscutting concerns :考虑边界交叉
5、Pointcuts 连接点集:程序运行中持有对多个连接点状态的集合。
5、advice 通知点行为:连接点集如同一个包括多个的“结构”,本身不具有行为,其行为靠通知点行为来实现。
以上的名词主要用于:AspectJ的介绍中。
Advices/Interceptors(消息传达/消息拦截)
一个“传达的消息”是一个被特定事件触发发的逻辑(代码)。这个“传达的消息”可以被插入到一个调用者和被调用者队列之间。可以说:传达消息是面向方面的编程的一个关键组成部份。
Introductions(成员推荐)
Introductions 是用来向已有的类增加方法和属性的一个方法。使用成员推荐你可以把一个现有类实现的接口“介绍”到另一个新的接口中。大家知道,接口的出现就是为了把定义和实现分开,现在使用面向方面的编程,可以做到动态改变既有类的接口,太不可思议了。在java编程中使用“成员推荐”你可以做到让一个java类实现多重继承。也就是说,使用“成员推荐”你可以在程序运行的时候来动态改变类的接口,实现不同的行为。就像孙悟空可以不断变换自己的行为,但是这个孙悟空必须有三个毫毛(被“成员推荐”)。看下面的例子:
Apple apple = new Apple();
LoggingAPI logging = (LoggingAPI)apple;
Apple.setLoggingLevel(VERBOSE);
使用“成员推荐”:Apple 可以动态的拥有log的功能了。
Metadata(元数据)
元数据是用来描述类本身的一些附加信息和其描述类捆绑在一起,可以静态的或者再运行的时刻获得这些类的描述信息。例子参见我的另一片文章(使用反射机制实现动态工厂模式)。EJB中就使用了大量的Metadata。
Pointcuts
如果说:interceptors, introductions, and metadata 是面向方面编程的特点的话,那么 pointcuts are 就是连接他们在一起的“胶水”。 Pointcuts 是运行在AOP框架,比如:告诉框架如何确认消息传达、元数据是如何在类中定义的、那些类、接口被“成员推荐”了等等。
后面我们说说:Jboss 4.0中的AOP框架。
java面向方面编程_面向方面编程的介绍----基本概念相关推荐
- 面向表开发 面向服务开发_面向繁忙开发人员的计算机视觉
面向表开发 面向服务开发 This article is part of a series introducing developers to Computer Vision. Check out o ...
- 函数式编程和面向对象式编程_比较函数式编程,命令式编程和面向对象的编程
函数式编程和面向对象式编程 As Oracle Corporation has introduced some Functional constructs in Java SE 8, now-a-da ...
- java函数式编程_说说函数式编程的那些事
今天这篇文章我们主要来聊聊函数式编程的思想. 函数式编程有用吗? 什么是函数式编程? 函数式编程的优点. 总所周知 JavaScript 是一种拥有很多共享状态的动态语言,慢慢的,代码就会积累足够的复 ...
- python最简单的图形编程_图形化编程、Python、Java、C++到底哪个适合你?
近两年,学习编程的热潮一波接一波,编程语言也是五花八门.盒子姐姐找到了一份2019年编程语言热度排行榜,其中,Java.C语言和Python高居榜首. 有些小伙伴就要问啦,编程语言这么多,区别在哪里呢 ...
- 概率编程编程_概率编程语言的温和介绍
概率编程编程 I recently started a new newsletter focus on AI education. TheSequence is a no-BS( meaning no ...
- libevent c++高并发网络编程_高并发编程学习(2)——线程通信详解
前序文章 高并发编程学习(1)--并发基础 - https://www.wmyskxz.com/2019/11/26/gao-bing-fa-bian-cheng-xue-xi-1-bing-fa-j ...
- python编程狮的在线编程_「Python编程狮-零基础学Python」をApp Storeで
Python编程狮是W3Cschool编程狮旗下专门为零基础Python编程爱好者打造的一款入门工具App,致力于帮助初学者入门,轻松迈入编程世界.学Python,从这里开始! [零基础也能学]初学者 ...
- 常州儿童学机器人编程_常州幼儿编程机器人
常州幼儿编程机器人 来源:教育联展网 编辑:佚名 发布时间:2019-07-08 少儿编程的发展前景 18年4月28日,全球首部人工智能普教教材--<人工智能基础>(高中版)在 ...
- abb机器人半圆编程_机器人示教编程1——教你快速示教ABB机器人
一.机器人安全操作守则 由于机器人系统复杂而且危险性大,在练习期间,对机器人进行任何操作都必须注意安全.无论什么时候进入机器人工作范围都可能导致严重的伤害,只有经过培训认证的人员才可以进入该区域. 以 ...
最新文章
- visual studio intergration
- c语言扫雷游戏代码_C语言游戏详解---扫雷游戏
- cocos2d menu菜单类
- vue从入门到精通之基础篇(二)组件
- 4列变成5列 datatable_云南美食界“5巨头”,谁才是NO.1?你家乡的那道菜也在列...
- java 中class相关的问题
- android layout 渲染,java – 渲染android.support.design.widget.CoordinatorLayout的问题
- 自己制作的ORMap框架终于完成的差不多了。
- Bitwise AND of Numbers Range
- bootstrap EF_Bootstrap优秀模板INSPINIA.2.9.2
- 深入解读5G关键技术
- reporting services报表部署错误:运行配置文件中指定的扩展时出现异常。 ---> 超过了最大请求长度。
- Android Remote Administrator Tool ——SpyNote 6.5 Released
- python猜随机数代码_猜随机数游戏Python
- linux 登陆 历史,linux记录每次登陆的历史命令
- 【读论文】Self-supervised feature adaption for infrared and visible image fusion
- Flume采集数据利器
- hdu 1205 吃糖果 抽屉原理
- iOS开发 ☞ emoji表情大全
- 阶乘末尾 0 的个数.c
热门文章
- 关于C/C++中函数参数传递的规则
- vue(el-button的五种类型,三种css格式)
- mysql配置文件结构_MariaDB/MySQL配置文件my.cnf解读
- 对代理商的评价怎么写_简历中的自我评价怎么写才能更吸引人?
- VS2017编译UE4.19.2报错
- Linux环境中Qt程序的手工发布
- VxWorks下几种定时延时方法的小结
- 【转】刨根究底字符编码之十——Unicode字符集的字符编码方式
- EasyUI学习总结(一)——EasyUI入门
- sharepoint当流程流转到某个节点对文档进行水印操作