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.锁的概念 线程安全问题的产生是因为多个线程并发访问共享数据造成的,如果能将多个线程对共享数据的并发访问改为串行访问,即一个共享数据同一时刻只能被一个线程访问,就可以避免线程安全问题.锁 ...
随机推荐
- 写给java web一年左右工作经验的人
摘要 大学就开始学习web,磕磕绊绊一路走过来,当中得到过开源社区很多的帮助,总结了这些年来的技术积累,回馈给开源社区. ps:图片都是从网上盗...感谢原作者. ps:文字千真万确都是我自己写的 ...
- Deepctr框架代码阅读
DeepCtr是一个简易的CTR模型框架,集成了深度学习流行的所有模型,适合学推荐系统模型的人参考. 我在参加比赛中用到了这个框架,但是效果一般,为了搞清楚原因从算法和框架两方面入手.在读代码的过程中 ...
- nodejs配置 https服务
const port = normalizePort(process.env.PORT || '3000'); const path = require('path'); const https = ...
- 【蓝桥】第八届C语言C组第7题 Excel地址(进制变形题,stack()简单使用)转载
标题: Excel地址 Excel单元格的地址表示很有趣,它使用字母来表示列号. 比如, A表示第1列, B表示第2列, Z表示第26列, AA表示第27列, AB表示第28列, BA表示第53列, ...
- Golang gin开源实例——表设计
UML Model 基本模型定义 type Model struct { ID int `gorm:"primary_key" json:"id"` Creat ...
- JVM:垃圾回收
概述 上一篇文章我们已经了解了 Java 的这几块内存区域.对于垃圾回收来说,针对或者关注的是 Java 堆这块区域.因为对于程序计数器.栈.本地方法栈来说,他们随线程而生,随线程而灭,所以这个区域的 ...
- php的排序算法
*对于算法来说,对于每个小伙伴来说都是比较头疼的,但是,为什么要学习算法? 算法是基础,算法能够提升智力,我想这两点就值得我们花时间去学习了.不要放弃,实在不会,先死记硬背下来,以后慢慢理解,一下是我 ...
- 049、Java中使用switch判断,不加入break时的操作
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- input中name和id的区别
一直很困惑,表单里面input标签有id和name,它们之间到底有什么区别自己很少去想,只知道一般的场景该怎么使用,今天就在网上搜索了一下,自己也总结一下.为什么有了ID还要有Name呢?其实ID就像 ...
- Codeforces Round #619 (Div. 2)
A. Three Strings 题意:给三个长度相同的非空字符串abc,依次将c中的每个字符和a或者b中对应位置的字符进行交换,交换必须进行,问能否使得ab相同. 思路:对于每一个位置,如果三个字符 ...