码迷,mamicode.com
首页 > 编程语言 > 详细

【sping揭秘】11、Java 平台上的AOP实现机制

时间:2018-04-26 23:33:33      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:执行   方式   final   直接   需要   声明   虚拟机   加载   系统模块   

 

动态代理

 

Jdk1.3只有引入的动态代理机制,可以再运行期间,为相应的接口(必须得有接口)动态生成对应的代理对象

基于以上问题,我们可以将横切关注点逻辑封装到动态代理的invocationhandler中。

 

性能肯定是比不过静态类的执行,毕竟这个是在运行期间使用反射

 

 

动态字节码增强技术

 

 

借助CGLIB直接在程序运行期间,动态构建字节码的class文件进行执行

不过,如果需要扩展的类以及类中的实例方法等声明为final的话,那么就无法对其进行子类化的扩展了。

 

Spring aop 无法采用动态代理机制进行AOP功能扩展的时候,会使用CGLIB库的动态字节码的增强来实现AOP的功能扩展

 

 

Java 代码生成

 

例如EJB会根据部署描述符文件提供的织入信息,会为相应的功能模块类根据描述符所提供的信息生成对应的java代码,然后通过部署工具或者部署接口编译java代码生成相应的java类。

 

 

 

自定义类加载器

 

Class都要通过相应的类加载器(Classloader)加载到java虚拟机之后才可以运行。

 

我们可以通过自定义类加载器的方式完成横切逻辑到系统的织入,自定义类加载器通过读取外部文件规定的织入规则和必要信息,在加载class文件期间就可以将横切添加到系统模块类的现有逻辑中,然后将改动过后的class交给java虚拟机运行。

 

【sping揭秘】11、Java 平台上的AOP实现机制

标签:执行   方式   final   直接   需要   声明   虚拟机   加载   系统模块   

原文地址:https://www.cnblogs.com/cutter-point/p/8955119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!