Java平台上的AOP实现机制
Java平台上的AOP实现机制
- 动态代理(Dynamic Proxy)机制,在运行期间动态的为相应接口生成对应的代理对象。SpringAop默认情况下采用这种机制来实现AOP机能。缺点:相对于编译后的静态类的执行,性能上可能略逊一筹。
- 动态字节码增强,通过ASM或者CGLIB等java工具库,在程序运行期间,动态构建字节码的class文件。在这样的技术前提下,我们可以为需要织入横切逻辑的模块类在运行期间,为这些系统模块类生成相应的子类。此技术不受限于接口。缺点:如果需要的扩展类中包含为final的实例方法的话,则无法对其进行子类化扩展。SpringAop在无法采用动态代理的时候,会使用CGLIB库的动态字节码增强支持来实现AOP功能的扩展。
- java代码生成,已过时。例:由EJB容器根据开发者描述信息,生成java代码,织入相应横切逻辑。
- 自定义类加载器,自定义类加载器通过读取外部描述信息,在加载class文件期间就可以将横切逻辑添加到系统模块类的现有逻辑中,然后将更改后的class文件交付给虚拟机。缺点:部分应用服务器无法完美支持自定义类加载器,所以会出现失效的可能性。
- AOL扩展,最强大也是最难掌握的方式,AspectJ就属于这种方式。
AOP相关概念
- Joinpoint,织入点
- 方法调用
- 方法调用执行
- 构造方法调用
- 字段设置
- 字段获取
- 异常处理执行
- 类初始化(类中某些静态类型或者静态代码块的初始化点)
- Poincut,Joinpoint的表述方式。参照Poincut规定的Joinpoint信息,才会明确应该往系统的哪些Joinpoint织入横切逻辑。Poinpoint表述方式:
- 直接指定Joinpoint所在方法名称。
- 正则表达式
- 使用特定的Poincut表述语言
Poincut运算,如下举例:


3.Advice,横切关注点逻辑的载体。它代表即将织入Joinpoint的横切载体。
按照advice在Joinpoint位置执行时的差异或者完成功能的不同,Advice可以分成多种形式:
- Before Advice:在Joinpoint指定位置之前执行的Advice类型。多用来做一些系统初始化工作
- After Advice:在相应连接点之后执行。该种形式又可以细划分为:
Java平台上的AOP实现机制的更多相关文章
- 【sping揭秘】11、Java 平台上的AOP实现机制
动态代理 Jdk1.3只有引入的动态代理机制,可以再运行期间,为相应的接口(必须得有接口)动态生成对应的代理对象 基于以上问题,我们可以将横切关注点逻辑封装到动态代理的invocationhandle ...
- Servlet Servlet是Java平台上的CGI技术
Servlet Servlet是Java平台上的CGI技术.Servlet在服务器端运行,动态地生成Web页面.与传统的CGI和许多其它类似CGI的技术相比,Java Servlet具有更高的效率并更 ...
- Java 动态代理及AOP实现机制
AOP实现机制http://www.iteye.com/topic/1116696 AOP: (Aspect Oriented Programming) 面向切面编程AOP包括切面(aspect).通 ...
- .NET平台上的Memcached客户端介绍
早上接到一个任务,需要对Linux服务器的Memcached的update操作进行性能测试,我发现我是一个典型的“手里拿着锤子, 就把所有问题都当成钉子”的人.我第一个念头就是,上Memcached的 ...
- .NET平台上的Memcached客户端介绍(Memcached Providers)
早上接到一个任务,需要对Linux服务器的Memcached的update操作进行性能测试,我发现我是一个典型的“手里拿着锤子,就把所有问题都当成钉子”的人.我第一个念头就是,上Memcached的官 ...
- Java动态代理-->Spring AOP
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Jav ...
- Linux平台上DPDK入门指南
1. 简介 本文档包含DPDK软件安装和配置的相关说明.旨在帮助用户快速启动和运行软件.文档主要描述了在Linux环境下编译和 运行DPDK应用程序,但是文档并不深入DPDK的具体实现细节. 1.1. ...
- 使用JDBC操作SAP云平台上的HANA数据库
本文假设您对JDBC(Java Database Connectivity)有最基本的了解.您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客AD ...
- Java多线程编程(4)--线程同步机制
一.锁 1.锁的概念 线程安全问题的产生是因为多个线程并发访问共享数据造成的,如果能将多个线程对共享数据的并发访问改为串行访问,即一个共享数据同一时刻只能被一个线程访问,就可以避免线程安全问题.锁 ...
随机推荐
- Lesson 2 Spare that spider
How much of each year do spiders killing insects? Why, you may wonder, should spiders be our friends ...
- SciPy fftpack(傅里叶变换)
章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...
- Java入门基础(类的方法)
方法 1.添加方法 方法表示一个类能做什么.在Java里,方法和属性属于对等的术语,在一个类中,不仅可以添加属性,还可以添加方法. 类 { 属性:描述“我有什么” 方法:描述“我能做什么” } 例子: ...
- 密码学概述&置换密码
密码学 概述 如何将信息进行加密,传送到接收方,接收方在进行解密获取信息,中间即使有窃听者窃听到信息也可解密破解. 密码学分类 密码编辑学(保密) 密码分析学(破译) 该破译与传统的黑客技术有一定的区 ...
- HihoCoder 1246:王胖浩与环
#1246 : 王胖浩与环 时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 王胖浩有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字. 对 ...
- 关于Orcale 11g 安装过程
1.前往Oracle官网下载相应安装包 https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.h ...
- Ubuntu 更新源 内核升级
cat /etc/apt/sources.listdeb http://mirrors.sohu.com/ubuntu/ precise main restricted universe multiv ...
- Pdo 绑定参数方法 通用更新语句
public static function upShelf($table,$arr,$where) { //将传入的数组进行key vlaue 分离 并将key值以问号方式绑定参数 ...
- Python调用Windows API函数编写录音机和音乐播放器
功能描述: 1)使用tkinter设计程序界面: 2)调用Windows API函数实现录音机和音乐播放器. . 参考代码: 运行界面:
- 【转】Spark Streaming 实时计算在甜橙金融监控系统中的应用及优化
系统架构介绍 整个实时监控系统的架构是先由 Flume 收集服务器产生的日志 Log 和前端埋点数据, 然后实时把这些信息发送到 Kafka 分布式发布订阅消息系统,接着由 Spark Streami ...