g of Aspects
(2) 装载时织入:修改class loader,在加载class时对其进行二进制增强,代表有JBoss AOP。
(3) 动态织入(运行时织入):动态织入可以在程序运行时,根据上下文决定调用的方面,它们的先后顺序,增加或删除一个方面等。主要是利用Java 动态代理(dynamic proxy)在运行时拦截方法调用,织入方面逻辑。大多数AOP 框架均以这种方式实现,灵活性强,且对被织入模块的侵入性较小。代表有Nanning、Spring AOP 等。
AOP实现必须具备以下的属性[61]:
(1) 一种组件语言,用来编写组件;
(2) 一种或几种Aspect语言,用来编写Aspect;
(3) 方面织入器,用于将组件语言与Aspect语言结合;
(4) 组件程序,即用组件语言编写的组件;
(5) 一个或几个Aspect程序。
图2-13 AOP实现的三层结构[61]
Figure 2-13 Three Layer Architecture of AOP
AOP实现的三层结[61]构如图2-13所示。第一层是语言及开发环境。这一层可能包括一种新的支持AOP的语言,或是在现有语言的基础上添加了对AOP的支持,可能还有描述Aspect的配置文件,也可能是专有的建模工具。特定编译器可能仅仅是JavaC,或者定制的编译器(直接将源代码和方面编织成符合Java字节码规范的Class文件)。
第二层是AO运行系统。Aspect的编织可以发生在编译期,也可以发生在装载期或运行期,目前主流的AOP实现一般都支持编译期和装载期编织。这一层包括基本的AOP组件,在原有意义上加上实现AO语义的逻辑。
第三层主要提供实现编织的低级组件,如反射、元数据处理、程序操纵、类装载器、拦截框架等。
2.4.3 AOP的横切模型
AOP应
上一篇:
基于PLC的立体车库控制系统的设计(word文档)
下一篇:
让我掉下眼泪的