JDK的动态代理机制
JDK的动态代理是jdk1.3及以上版本提供的一种编程方法,它为一些面向切面的操作如性能检测,权限验证,日志记录等提供了一种解决方案。它是在被代理类的某个方法在执行前后,通过代理类执行一些新的逻辑。下面通过一个例子加以说明。
1.JDK的动态代理,必须要有一个接口,所以先定义一个接口,:
public interface ProxyInterface {
void execute();
}
2.定义一个类实现这个接口
public class ProxyClass implements ProxyInterface {
//这里为了简单,仅用system输出一段字符串
@Override
public void execute() {
// TODO Auto-generated method stub
System.out.println("execute method");
}
}
3.定义代理类,在其中加入自己的处理逻辑
public class Proxyhandler implements InvocationHandler {
private ProxyInterface pi;
public void setPi(ProxyInterface pi) {
this.pi = pi;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
//execute方法执行前的逻辑
System.out.println("------Before execute------------");
Object result = method.invoke(pi, args);
//execute方法执行后的逻辑
System.out.println("------After execute-------------");
return result;
}
}
4.定义一个测试类,测试这个动态代理
public class TestProxy {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//new 一个被代理对象
ProxyInterface pi = new ProxyClass();
//new一个代理对象
Proxyhandler ph = new Proxyhandler();
//将被代理对象赋给代理对象
ph.setPi(pi);
//通过代理机制生成一个新的被代理对象
ProxyInterface p =
(ProxyInterface) Proxy.newProxyInstance(pi.getClass().getClassLoader(),new Class[]{ProxyInterface.class}, ph);
//执行代理方法
p.execute();
}
}
输出结果如下:
------Before execute------------
execute method
------After execute-------------
通过以上代码,就实现了一个非常简单的JDK动态代理,但它有个缺点,就是必须要有接口,如果是继承类的话,它就无法实现动态代理了。不过这可以用CGLIB动态代理来解决。
分享到:
相关推荐
java代理机制 JDK动态代理和cglib代理 详解
动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须...
动态代理::在程序运行时,运用反射机制动态创建而成。 动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为...
通过JDK动态代理机制实现增强,来理解AOP底层的实现
* 动态代理(JDK代理、接口代理、拦截器模式) * 动态代理中的静态方法:java.lang.reflect.Proxy.newProxyInstance (ClassLoader(类加载器),interface(接口),handler(监听处理器)) * * 代码示例:《帮爸爸...
java动态代理主要有2种,Jdk动态代理、Cglib动态代理,本文主要讲解Jdk动态代理的使用、运行机制、以及源码分析。当spring没有手动开启Cglib动态代理,即:或@EnableAspectJAutoProxy(proxyTargetClass = true),...
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等...动态代理:在程序运行时,运用反射机制动态创建而成。
我们在阅读一些 Java 框架的源码时,基本上常会看到使用动态代理机制,它可以无感的对既有代码进行方法的增强,使得代码拥有更好的拓展性。 通过从静态代理、JDK 动态代理、CGLIB 动态代理来进行本文的分析。 静态...
Java在JDK1.3后引入的动态代理机制,使我们可以在运行期动态的创建代理类。使用动态代理实现AOP需要有四个角色:被代理的类,被代理类的接口,织入器,和InvocationHandler,而织入器使用接口反射机制生成一个代理类...
本资源将深入探讨Spring框架中使用的两种关键的动态代理方式:JDK动态代理和CGLib动态代理。这两种代理方式在Spring AOP中起到关键作用,用于实现横切关注点的切面编程。通过学习它们的原理和实际应用,您将能够更好...
NULL 博文链接:https://bijian1013.iteye.com/blog/2382393
剖析java动态代理实现机制,只有明白了原理才会应用。详细请看代码
三种动态代理的实现(静态,jdk,cglib),jdk动态代理是由java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的
使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。 jdk动态代理,必须有接口,目标类必须实现接口...
本文档先讲解了JDK的反射机制,然后是Proxy的动态代理、CGLIB的动态代理,因为这些是Spring AOP的底层技术,清楚了它们,你就更能够理解Spring AOP是如何工作的。在文档的最后简要写了Spring AOP的使用,因为这不是...
该思维导图主要讲解了代理模式的具体实现,包括...其中jdk代理主要讲解了其具体的实现方式、原理、缺点、缓存机制等。Cglib代理主要讲解了其原理、与JDK代理的对比、Enhancer源码解析、methodProxy和Fastclass源码等。
jdk动态代理是由Java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。总的来说,反射机制在生成类的过程中比较高效,而asm在生成类之后的相关执行过程中比较高效(可以通过将asm生成的类进行缓存,...
8本书,中英文都有,对反射讲解的很透彻。 希望对大家有些帮助! 具体内容下载看看,就知道了,要是不值这分,以后接不发了,呵呵
本资源利用文档加源码的方式较详细的介绍了JDK 动态代理和Spring的AOP机制.相信对您理解相关方面的知识有很大作用.
spring中动态代理机制的实现原理及AOP实现原理,JDK的反射,cglib类。