面向方面编程的基本概念
c++的基本概念

C++是一种广泛使用的高级编程语言,它是由Bjarne Stroustrup于1983年开发出来的。
C++在C语言的基础上增加了许多新的特性,包括面向对象编程、异常处理、STL(标准模板库)等。
C++的基本概念包括:面向对象编程:C++是一种面向对象的编程语言,这意味着C++程序是由对象组成的,这些对象可以包含数据和操作数据的函数。
面向对象编程的核心概念包括类(class)、对象(object)、继承(inheritance)、多态(polymorphism)和封装(encapsulation)。
类和对象:类是定义对象的模板,而对象是类的实例。
类定义了对象的属性和方法。
例如,如果我们有一个“汽车”类,那么我们可以创建一个“宝马”对象,这个对象将继承“汽车”类的所有属性和方法。
继承:继承是面向对象编程中的一个重要概念,它允许我们基于已有的类创建新的类。
新类的对象将继承原有类的所有属性和方法,同时还可以添加新的属性和方法。
多态:多态是指一个接口或超类可以引用多种实际类型的对象。
这意味着,对于一个特定的接口或超类,其实际类型可以是多种不同的类。
封装:封装是指将数据和操作数据的函数捆绑在一起,形成一个独立的实体,即对象。
这样可以隐藏数据的细节,只通过对象的方法来访问数据。
异常处理:C++提供了异常处理机制,可以捕获和处理运行时错误。
异常是程序在运行时发生的问题,例如尝试打开一个不存在的文件。
STL(标准模板库):C++的STL是一组通用的模板类和函数,包括容器、迭代器、算法和函数对象。
这些组件可以极大地简化C++程序的编写。
内存管理:C++提供了对内存管理的精细控制,包括显式地分配和释放内存,以及智能指针等特性,可以帮助开发者避免内存泄漏和其他相关问题。
运算符重载:C++允许程序员重载运算符,这意味着程序员可以定义运算符的行为,以适应不同的类。
例如,程序员可以重载“+”运算符来定义两个自定义类型的对象的加法行为。
AOP

AOP实现方式
1 横切点实现方式
AOP中横切关注点的实现方式是这样的, 中横切关注点的实现方式是这样的, 中横切关注点的实现方式是这样的 函数是advice 实现并封装在 实现并封装在Aspect中,编 函数是 中 织器将advice的调用语句无缝的织入到其它 织器将 的调用语句无缝的织入到其它 的模块中.编程者只需要在aspect中通过 的模块中.编程者只需要在 中通过 pointcut- designator定义需要织入的位 定义需要织入的位 以及定义advice的功能,剩下就让编织 的功能, 置,以及定义 的功能 器来完成就可以了. 器来完成就可以了 2 AspectJ的编织器的实现方式 的编织器的实现方式 目前, 的实现方式主要有两种: 目前,AOP的实现方式主要有两种:动态织 的实现方式主要有两种 入和静态织入. 入和静态织入.
AOP背景
AOP设计并不是万能的,它是在oop设计的发 设计并不是万能的,它是在 设计并不是万能的 设计的发 展过程中诞生的, 认为: 展过程中诞生的,Gregor Kiczales 认为:"我们 并没有也不想把一切推倒重来, 并没有也不想把一切推倒重来,我们提供的只是一种 15%的解决方案".通过对比 的解决方案" 通过对比AOP和OOP的技术实 的解决方案 和 的技术实 在对象之间的横向连接不是很频繁的情况下, 现,在对象之间的横向连接不是很频繁的情况下, AOP并不比 并不比OOP有多大的优势,所以,AOP 是对 有多大的优势, 并不比 有多大的优势 所以, OOP在某些应用场合的补充.AOP就是分离横切关注 在某些应用场合的补充. 在某些应用场合的补充 就是分离横切关注 点来实现软件的模块之间的松散耦合, 点来实现软件的模块之间的松散耦合,从而提高软件 的可维护性和可复用性. 的可维护性和可复用性.
计算机科学学生面试常见问题及答案

计算机科学学生面试常见问题及答案问题1:计算机科学的基本概念是什么?计算机科学是研究计算机以及与其相关现象的学科。
它涵盖了计算机硬件、软件、算法、数据结构、编程语言等方面的知识。
计算机科学主要关注如何有效地使用计算机解决问题、设计算法以及优化计算机系统性能等。
问题2:请解释数据结构和算法的区别。
数据结构是指数据的组织方式,它可以用来存储和操作数据。
例如,数组、链表、栈、队列等都是常见的数据结构。
算法则是解决问题的步骤和规则,它利用数据结构来实现特定的操作。
算法可以用来操作、处理和转换数据,以达到解决问题的目的。
问题3:什么是面向对象编程(OOP)?面向对象编程是一种编程范式,它以对象为基本单位进行编程。
对象是具有状态(属性)和行为(方法)的实体。
面向对象编程的核心概念包括封装、继承和多态。
这种编程方式可以提高代码的重用性、可维护性和可扩展性。
问题4:什么是数据库,以及你对关系型数据库和非关系型数据库有什么了解?数据库是用于存储和组织数据的系统。
关系型数据库使用表格来组织数据,并且通过关系进行数据之间的连接。
非关系型数据库则使用其他方式存储和组织数据,如文档、键值对、图形等。
关系型数据库具有强大的数据完整性和丰富的查询功能,非关系型数据库则更适合处理大规模数据和高并发访问。
问题5:请解释什么是TCP/IP协议?TCP/IP(Transmission Control Protocol/Internet Protocol)是一组用于在互联网上进行通信的协议集合。
它包括传输层的TCP协议和网络层的IP协议,以及其他一些辅助协议。
TCP/IP协议为数据的可靠传输和网络间的数据路由提供了标准化的机制,是互联网通信的基础。
问题6:你有哪些编程语言的经验?请列举几种你熟悉的编程语言。
我有以下编程语言的经验:- C++- Java- Python问题7:请解释什么是面向接口编程。
面向接口编程是一种编程方法,它强调代码之间的松耦合和灵活性。
Java编程语言的基本概念和应用

Java编程语言的基本概念和应用一、概述Java作为一种跨平台的高级语言,在当今软件开发行业具有广泛的应用。
它被广泛应用于企业级应用开发、Web开发、移动应用开发、大数据处理、人工智能等领域。
本文将从Java编程语言的基本概念、语言特性和其应用方面来进行阐述。
二、基本概念1. Java发展历史Java是由Sun Microsystems公司于1995年推出的一种面向对象的编程语言。
最初在设计上它的目标就是为了用来开发嵌入式系统。
随着互联网的快速发展以及Sun公司自身的努力,在Web开发、企业级应用开发等领域得到了广泛应用。
2009年,Sun公司被Oracle公司收购,Java也成为了Oracle公司旗下的一个产品。
2. Java虚拟机Java虚拟机(JVM)是Java的核心,它是Java语言的运行环境。
Java虚拟机的作用是将编写的Java程序转化为字节码并执行。
Java语言通过JVM实现了跨平台,即一份程序或者一个库可以在多个平台上运行,而不需要针对每个平台分别进行编译和打包。
3. Java程序结构Java程序的基本结构包括:(1). Package(包):Java程序一般都是从一个包开始的,每个包下面又可以包含多个类。
包的作用是为了防止不同包下的类名重名,同时也可以方便地进行分类管理。
(2). Class(类):Java中的所有代码都要写在class中,一个Java程序中可以有多个class。
(3). Method(方法):方法是Java中功能最基本的单元,一个Java程序可以由多个方法组成。
在方法中可以定义变量、控制语句、循环语句等。
(4). Statement(语句):Java中的语句有很多种,包括赋值语句、控制语句、循环语句、异常处理语句等。
4. Java数据类型Java数据类型分为基本数据类型和引用数据类型。
基本数据类型包括:byte、short、int、long、float、double、boolean和char等8种类型。
面向对象编程的基本概念

面向对象编程的基本概念面向对象编程的基本概念随着计算机技术的不断发展和应用的深入,编程语言也不断演化,出现了各种面向对象编程语言,如Java、C++、Python等。
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将计算机程序模块化,以对象作为程序设计的基本单元进行组织和设计。
本文将从面向对象编程的概念、特点、实现方式、应用等方面进行详细介绍。
一、面向对象编程的概念面向对象编程是一种编程思想和方法,它将现实世界的事物抽象为“对象”,以及对象之间的交互,来进行程序设计和模块化。
对象是指具有属性和方法的实体,它既可以是现实世界中的事物,也可以是抽象的概念,如字符串、整数、函数等。
而方法则是对象的行为,用于操作对象的属性,实现某种功能。
面向对象编程的核心思想就是封装、继承和多态。
二、面向对象编程的特点1、抽象化和封装化面向对象编程通过抽象化和封装化,将复杂的现实世界事物抽象为简单的对象,并将对象的内部细节隐藏起来,使得外部只能通过对象的接口来访问对象,从而实现了信息的隐藏和保护。
2、继承性继承性是面向对象编程的一个重要特点,它允许创建一个新的类,并从一个或多个现有类中继承属性和方法,从而减少了代码的冗余,提高了代码的重用性和灵活性。
3、多态性多态性是面向对象编程的另一个重要特点,它允许不同类型的对象调用同一个方法,不同对象按照自己的方式去实现这个方法,从而增强了程序的灵活性和可扩展性。
三、面向对象编程的实现方式1、类和对象类是具有相同属性和方法的对象的集合,它是面向对象编程的基本概念。
对象是类的实例,包含了类的所有属性和方法,可以通过对象来访问类的属性和方法。
2、封装封装是面向对象编程的特有功能,它可以将属性和方法隐藏起来,只留下外界可以访问的接口,从而达到保护数据的目的。
3、继承和多态继承是面向对象编程中的另一个重要概念,它可以复用已有的代码,减少代码冗余,提高代码的可重用性。
php现场面试题(3篇)

第1篇第一部分:基础知识1. PHP是什么?- 请简要描述PHP是什么,它的主要用途是什么。
2. PHP的版本更新历史- 请列举至少三个PHP的主要版本,并简要说明每个版本的主要更新和改进。
3. PHP的运行环境- 请解释PHP运行的基本环境需要哪些组件,如服务器(如Apache、Nginx)、数据库(如MySQL、PostgreSQL)等。
4. PHP的数据类型- 请列举PHP中的所有基本数据类型,并解释它们之间的区别。
5. 变量声明- 在PHP中如何声明变量?请展示不同变量的声明方式。
6. 运算符- 请列举PHP中的运算符类型,并举例说明每种运算符的使用。
7. 条件语句- 请写出PHP中的if、else、switch语句的基本用法。
8. 循环语句- 请列举PHP中的循环语句(如for、while、do-while)并解释它们的用法。
9. 函数- 在PHP中如何定义和调用函数?请举例说明。
10. 数组- 请解释PHP中数组的类型,如索引数组和关联数组,并展示如何创建和操作数组。
11. 字符串处理- 请列举至少五个PHP中处理字符串的函数,并解释它们的作用。
12. 文件操作- 在PHP中如何进行文件读取和写入操作?请展示代码示例。
第二部分:面向对象编程(OOP)1. 面向对象编程的基本概念- 请解释面向对象编程的基本概念,如类、对象、封装、继承、多态等。
2. 如何定义一个PHP类- 请展示如何定义一个简单的PHP类,包括属性和方法的声明。
3. 构造函数和析构函数- 请解释构造函数和析构函数在PHP中的作用,并展示如何使用。
4. 继承- 请解释PHP中的继承机制,并展示如何创建一个子类继承自一个父类。
5. 多态- 请解释多态的概念,并展示如何使用PHP中的多态。
6. 接口- 请解释PHP中的接口概念,并展示如何定义和使用接口。
7. 魔术方法- 请列举PHP中的魔术方法,并解释它们的作用。
第三部分:高级特性1. 命名空间- 请解释PHP中命名空间的概念,并展示如何使用命名空间。
面向方面(aspect)的程序设计方法
面向方面(aspect)的程序设计方法程虎摘要 面向方面的程序设计(Aspect—Oriented Programming, AOP)是一种很有前途的新型程序设计方法,它是面向过程、面向对象方法的进一步发展。
通过引入方面概念,改进关注点的分离(separation of concerns),减少代码缠结(code tangling)解决横切关注点(cross cutting concerns)的问题,提高软件质量和效率。
自1997年AOP以来的7年间,全球已开展大量有关研究与开发工作,并自2002年起每年召开专门的国际学术会议(International conf .on Aspect-Oriented Software Development,AOSD)探讨问题,交流取得的成果。
关键词 方面,面向方面的程序设计(AOP),关注点,横切关注点,面向方面的软件开发(AOSD)。
1引言计算机软件包括程序及其文档。
程序设计包括设计、编制和调试程序的方法与过程。
程序设计方法涉及用于指导程序设计工作的原理和原则,以及基于这些原理和原则的设计方法和技术。
数十年来,经历公式翻译、过程式程序设计、结构化程序设计、逻辑式程序设计、函数式程序设计以及面向对象程序设计等。
程序设计方法学可以对程序设计人员选用具体的程序设计方法起指导作用,而具体的程序设计方法对象程序设计工作的质量以及所设计出来的程序(即软件)的质量影响巨大。
世间事物总是在不断发展变化,螺旋式上升。
程序设计方法也如此,近年来流行面向对象程序设计方法。
面向对象的方法起源于面向对象的编程语言,可以追溯到20世纪60年代后期的Simula67语言。
到20世纪末,面向对象方法已逐步发展成为一类完整的方法学和系统化的技术体系。
它不仅指导编程设计,还指导开发操作系统、数据库、网络和编译系统等。
使用面向对象语言来实现面向对象设计相对而言比较容易,用非面向对象语言也可实现面向对象设计。
php中的oop面试题(3篇)
第1篇一、基本概念1. 请简述PHP中面向对象编程(OOP)的基本概念,以及OOP的三大特性是什么?2. 解释PHP中的封装、继承和多态,并举例说明。
3. 请简述PHP中的类和对象的关系,以及如何创建一个类和对象。
4. 请解释PHP中的静态成员和静态方法,以及它们与普通成员和方法的区别。
5. 请解释PHP中的构造函数和析构函数,以及它们的作用。
二、类和对象6. 请解释PHP中的访问控制,以及public、protected和private关键字的作用。
7. 请解释PHP中的继承,以及子类和父类之间的关系。
8. 请解释PHP中的多态,以及如何实现多态。
9. 请解释PHP中的抽象类和接口,以及它们的作用。
10. 请解释PHP中的final关键字,以及它对类和成员的影响。
11. 请解释PHP中的魔术方法,以及常见的魔术方法有哪些。
三、属性和方法12. 请解释PHP中的静态属性和静态方法,以及它们与普通属性和方法的区别。
13. 请解释PHP中的常量,以及如何定义和使用常量。
14. 请解释PHP中的魔术常量,以及常见的魔术常量有哪些。
15. 请解释PHP中的魔术方法__get()和__set(),以及它们的作用。
16. 请解释PHP中的魔术方法__isset()和__unset(),以及它们的作用。
17. 请解释PHP中的魔术方法__toString(),以及它何时被调用。
四、继承和多态18. 请解释PHP中的多态,以及如何实现多态。
19. 请解释PHP中的继承,以及子类和父类之间的关系。
20. 请解释PHP中的方法覆盖,以及如何实现方法覆盖。
21. 请解释PHP中的构造函数和析构函数,以及它们在继承中的作用。
22. 请解释PHP中的抽象类和接口,以及它们的作用。
五、设计模式23. 请解释设计模式的概念,以及设计模式在PHP中的应用。
24. 请解释单例模式,以及如何实现单例模式。
25. 请解释工厂模式,以及如何实现工厂模式。
最全Python基础的知识点复习
最全Python基础的知识点复习一、内容概要基础语法:涵盖Python的基本语法元素,包括变量、数据类型、运算符、控制结构(如条件语句和循环语句)等。
数据类型与操作:详细介绍Python中的常用数据类型(如列表、元组、字典、集合等),以及这些数据类型的基本操作和特性。
函数与模块:讲解如何定义和使用函数,以及模块的概念和用法,包括自定义模块和Python标准库的使用。
面向对象编程:介绍Python中的类与对象,包括属性、方法、继承等面向对象编程的基本概念。
错误与异常处理:阐述Python中的错误和异常类型,以及如何使用tryexcept语句进行异常处理。
文件操作与IO:讲解Python中的文件操作,包括文件的打开、读取、写入和关闭等。
常用库和框架:介绍Python中常用的库和框架,如NumPy、Pandas、Matplotlib等,以及它们在数据处理、科学计算和可视化方面的应用。
通过本文的复习,读者可以全面了解Python编程的基础知识点,为进阶学习和实际应用打下坚实的基础。
二、基础语法变量和命名规则:Python中的变量名可以包含字母、数字和下划线,但不能以数字开头。
Python中的变量名是区分大小写的,因此要注意命名规范。
还需要了解Python中的保留字(如if、else、while等),避免使用这些保留字作为变量名。
数据类型:Python中的数据类型主要包括整数、浮点数、字符串等,并且拥有一种灵活的类型转换机制。
熟练掌握这些基本数据类型的用法以及它们之间的转换方法是基础语法的关键之一。
运算符和表达式:Python中的运算符包括算术运算符(如加、减、乘、除等)、比较运算符(如大于、小于等于等)和逻辑运算符(如与、或、非等)。
通过熟练掌握这些运算符的用法,可以构建各种复杂的表达式,实现数据的计算和判断。
条件语句和分支结构:在编程过程中,需要根据不同的条件执行不同的操作。
Python中的条件语句包括if语句和ifelse语句,可以实现根据条件进行分支的功能。
python面向对象程序设计的概念
python面向对象程序设计的概念Python 面向对象程序设计(Object Oriented Programming,OOP)是一种编程范式,它将数据和相关的操作封装在一起,形成一个对象。
下面是Python 面向对象程序设计的一些重要概念:1、对象:对象是面向对象编程的基本单位,它是一个数据结构和相关操作的组合。
对象具有属性和方法,可以对其进行操作和处理。
2、类:类是对象的定义,它描述了对象的属性和方法。
类定义了对象的类型,并用于创建对象的实例。
3、封装:封装是将对象的属性和方法结合在一起,隐藏其内部实现细节,只暴露必要的接口给外部使用。
这样可以提高代码的可维护性和安全性。
4、继承:继承是面向对象编程中的重要特性,它允许一个类从父类继承属性和方法。
子类可以继承父类的特性,并可以根据需要进行扩展和修改。
5、多态:多态是指不同的对象在接收到相同的消息(方法调用)时,能够根据自身的特性进行不同的响应。
这种特性使得代码更加灵活和可扩展。
6、实例:实例是类的具体表现,它是根据类创建的对象。
每个实例具有类定义的属性和方法,可以进行独立的操作和处理。
7、属性:属性是对象的特性或状态,用于描述对象的特征。
属性可以是数据类型的值,如整数、字符串等。
8、方法:方法是与对象相关的操作或函数,用于修改对象的属性或执行特定的任务。
方法可以接受参数,并返回结果。
9、构造函数:构造函数是类中的特殊方法,用于在创建对象时进行初始化操作。
它可以为对象的属性设置初始值。
10、访问修饰符:访问修饰符用于控制类的属性和方法的访问权限,包括公有的(public)、私有的(private)和受保护的(protected)。
通过使用这些概念,Python 面向对象程序设计可以更好地组织和管理代码,提高代码的重用性和可维护性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向方面编程的基本概念天道酬勤发表于 2005-11-4 11:13:00面向对象的编程中常用的概念是:继承、封装、多态。
在面向方面的编程中常使用的概念是:advices/interceptors, introductions, metadata, and pointcuts。
面向方面的编程思路很简单。
从面向过程、函数的编程到面向对象的编程到面向接口的编程到面向组件、模块编程的发展历史我们可以知道,编程方法学的演进是一步一步的扩大了编程考虑的“边界”。
到目前为止我们的编程世界里的宇宙边界是“类、接口,或者组件”,在这个边界里,我们认为,一个类实现一个接口,那就不能动态的实现另一个接口,已有类的行为在编译以前就基本固定,要么是类内部定义的方法,要么是要么是继承和实现接口继承过来的方法。
但是实际的编程工作中我们碰到了“跨边界的情况”,需要多个类,接口,组件合作才能完成的工作,比如:多线程并发访问,程序流集中控制,序列化和程序状态保持,以及需要多个“类、接口、组件边界”共同参于才能完成的工作。
为了更好的处理多个边界共同完成同一方面的工作,面向方面的编程出现了。
这里的方面,我们可以指:为完成同一任务而需要多个类、接口、组件一起协作工作的综合。
你可以认为方面其实就是一个更大的类,这个类主要由我们OOP中的类、接口组成,当然这些类和接口是如此的亲密,以至于他们行为(方法)可以相互转换。
其实这没什么大不了的,接口的出现不是实现了动态的改变类的行为的吗?面向方面的编程只是做了一个延伸,把这个改变提升到了接口这个层次上。
写到这里,我感到:耳朵清静了,但是世界还没有清静,因为到实际的运用这种思路编程,还需要很长的时间,和更多工具开发商的支持。
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框架Jboss 4.0 提供了AOP框架,这个框架是和Jboss应用服务器紧密集成的,但是也可以独立运行。
下面我们看看基于AOP编程的基本过程:1、定义“消息拦截器”InterceptorJboss 提供了一个消息拦截器的接口,如下:public interface Interceptor{public String getName();public InvocationResponse invoke(Invocation invocation)throws Throwable;}值的一提的是:类中所有字段、构造函数、方法等的相关操作全部由“消息拦截器”拦截invoke,然后“打包”成一个Invocation对象,操作完成后返回IvvocationResponse对象。
详见下例:import org.jboss.aop.*;import ng.reflect.*;public class TracingInterceptor implements Interceptor{public String getName(){return TracingInterceptor;}public InvocationResponse invoke(Invocation invocation)throws Throwable {String message = null;if (invocation.getType() == InvocationType.METHOD ){Method method =MethodInvocation.getMethod(invocation); message =method: + method.getName();}else if (invocation.getType() ==InvocationType.CONSTRUCTOR){Constructor c = ConstructorInvocation.getConstructor(invocation);message = constructor: + c.toString();}else{return invocation.invokeNext();}System.out.println(Entering + message);InvocationResponse rsp = invocation.invokeNext();System.out.println(Leaving + message);return rsp;}}2、把“消息拦截器”和一个具体的类相关联这里的关联用到上面提到的“胶水”pointcut,在xml配置文件中实现:和J2EE配置文件名一样,AOP配置文件的命名是固定的:META-INF/jboss-aop.xml<?xml version="1.0" encoding="UTF-8"><aop><interceptor-pointcut class="POJO"><interceptors><interceptor class="TracingInterceptor" /></interceptors></interceptor-pointcut></aop>上面的代码把:TracingInterceptor消息拦截器和POJO类相关联。
POJO的代码如下:public class POJO{public POJO() {}public void helloWorld(){ System.out.println(Hello World!); }public static void main( String[] args){POJO pojo = new POJO();pojo.helloWorld();}}TracingInterceptor消息拦截器将会拦截:main(), POJO(), 和 helloWorld()方法。
编译后:使用控制台命令:java -Djava.system.class.loader=org.jboss.aop.standalone.SystemClassLoader POJO 输出的结果如下:Entering method: mainEntering constructor: public POJO()Leaving constructor: public POJO()Entering method: helloWorldHello World!Leaving method: helloWorldLeaving method: mainJBOSS是如何做到上面的拦截的呢?AOP 的框架的中心任务是:消息拦截interception和消息代理delegation。
AOP 框架具体完成两项工作:1、组件激活(component activation )2、方法激活(Method invocation)组件激活就是AOP框架构健一个aspect的对象实现,并返回一个(消息拦截)interceptor 的引用(不是返回对对象的引用)。
方法激活是当一个调用者调用(消息拦截)interceptor 的时候,interceptor (消息拦截)的代理调用已经注册的aspect,然后返回被调用的object。
Jboss AOP框架是在字节代码的基础上进行上面的工作的。
从实现上将就是对ClassLoader 的完全控制,步步拦截,这些工作Jboss都已经做好了,当然如果你在Jboss 应用程序服务器之外运行的话,你不得不参照jboss的reference来自己实现classloader了。