JDK动态代理实现原理分析
JDK动态代理JDK动态代理允许在运行时通过反射创建Java接口的实现。代理可以被看作是一个将方法调用转发给目标实例并最终将目标实例产生的任何结果返回给调用方的主体。由于调用链将通过代理,代理本身也将能够在目标方法调用前后执行任意处理。非常流行的Spring框架使用JDK动态代理作为其代理创建策略之一。当我们在Spring服务中声明一个事务方法时,容器将创建一个代理,该代理将拦截对目标方法的调用,并用所需的事务管理指令来修饰它。 JDK动态代理是JDK附带的一个特性,由java.lang.reflect.* 包提供支持。它必须使用接口来提供代理对象。在JDK动态代理逻辑中,必须实现java.l ...
Read more
CGLIB动态代理实现原理分析
CGLIB介绍​ CGLIB是一个功能强大的高性能代码生成库。它被广泛应用于基于代理的AOP框架(如springaop和dynaop)中,以提供方法拦截。Hibernate作为最流行的ORM工具,也使用CGLIB库代理单端关联(除了collection lazy loading,它使用另一种机制)。EasyMock和jMock是流行的Java测试库。它们提供模拟对象来支持测试。两者都使用CGLIB代理没有接口的类。​ CGLIB库使用ASM(一种轻量级但高性能的字节码操作框架)来转换字节码并生成新的类(如图1.1)。 除了CGLIB之外,Groovy和Bean S ...
Read more
Spring AOP与AspectJ的比较
如今已经存在很多AOP相关的类库,例如AspectJ、JAC、Nanning等。这些类库都有它们独特的目标和规范。本文将比较Java中最流行的两个AOP框架,Spring AOP和AspectJ。 AOP的概念在我们开始前先简单回顾一下AOP相关的术语和核心概念: Aspect(切面):对一个横切多个类的关注点的一个模块化。事务管理是是一个横切关注点的一个很好的例子。在Spring AOP中,切面可以是通过基于XML(the schema-based approach)或用@Aspect注解(the @AspectJ style)来实现。 Join point(连接点):是程序执行期间的一个 ...
Read more