首先:先来写一个实现类的接口,比如我们就写一个火车启动的过程
public interface Train { public void move() ; public void stop(); }
因为JDK代理必须使用接口来实现,所以接口是必须的,然后我们就来写一个实现类,来实现火车的启动与停止,
public class TrainImp implements Train { public void move() { System.out.println("火车开动了。。。"); } public void stop(){ System.out.println("火车停止了。。。"); } }
接着我们要实现的时通过代理来在Train的方法,,在调用对象的方法前来加入一些东西
public class JDKProxyTest implements InvocationHandler{ private Object object ; public Object createProxy(Object obj){ this.object = obj ; return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("befor"); method.invoke(object, args); System.out.println("after"); return null ; } }
这样一个代理类就写好了,最后是测试方法
public class MainTest { public static void main(String[] args) { JDKProxyTest test = new JDKProxyTest() ; Train obj = (Train) test.createProxy(new TrainImp()); obj.move(); obj.stop(); } }
在move方法前方法后都会有befor或者是after,这就是jdk实现代理的过程
相关推荐
Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理对象,这些代理对象能够拦截方法调用并在调用前后执行自定义的行为。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect....
Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理类,这些代理类可以扩展或修饰已存在的接口实现。动态代理在很多场景下非常有用,比如日志记录、性能监控、事务管理等,这些功能可以在不修改原始...
Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理对象,这些代理对象可以扩展或增强已存在的接口实现。动态代理在处理AOP(面向切面编程)场景、事件监听、性能监控等方面有着广泛的应用。下面我们将...
Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理类,这些代理类可以扩展或修饰已存在的接口实现。动态代理在处理跨层调用、事务管理、日志记录、性能监控等方面非常有用,尤其在AOP(面向切面编程)...
本文将深入探讨两种主要的Java代理实现:JDK动态代理和CGLIB代理。 一、JDK动态代理 JDK动态代理基于接口实现,它要求被代理的类必须实现至少一个接口。在运行时,Java会动态地创建一个新的类,这个类实现了与原始...
### Java JDK 实现AOP详解 #### AOP的起源与发展 面向方面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,由施乐公司帕洛阿尔托研究中心(Xerox PARC)在20世纪90年代发明。AOP的初衷是为了更好地...
基于java的jdk动态代理, 比较了静态代理与动态代理的区别,以及动态代理的底层实现,反编译class文件 jdk动态代理和cglib的区别
CGlib通过创建目标类的子类并重写其中的方法来实现代理。 ```java // 引入cglib库 <groupId>cglib <artifactId>cglib <version>3.3.0 // 使用CGLIB创建代理 Enhancer enhancer = new Enhancer(); enhancer....
- **只能代理实现了接口的类**:这是JDK动态代理的一个限制,如果目标对象没有实现任何接口,则无法使用JDK动态代理。 - **性能开销**:虽然这种开销通常很小,但在高并发场景下可能会成为瓶颈。 通过上述分析,...
Java JDK动态代理实现原理实例解析 Java JDK动态代理实现原理实例解析是指通过Java JDK提供的代理机制来实现动态代理的原理和实例解析。动态代理是一种非常重要的设计模式,它可以在运行时生成代理类,从而实现了...
- **动态代理**:允许在运行时创建实现一组给定接口的新类。 - **增强的for循环**(foreach):简化了遍历数组和集合的操作。 - **try-catch-finally增强**:可以捕获多个异常,且finally块可以有返回值。 - **...
JDK动态代理的核心API包括`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`。 - **`java.lang.reflect.Proxy`**:提供了创建动态代理类和实例的方法。通过`newProxyInstance`方法,传入...
- 动态代理:增加了`java.lang.invoke`包,支持运行时动态创建代理类和方法调用处理。 - NIO.2:引入了新的I/O API,如文件系统API,异步I/O等,提高了文件操作性能。 - Swing增强:包括JTable和JTree性能提升,...
对于Java开发者来说,深入理解JDK源代码能够提升编程技能,了解底层实现,优化代码性能,以及解决复杂问题。以下将从多个方面详细介绍JDK1.6源代码中的关键知识点。 1. **核心类库解析** - `java`包:包含Java标准...
在Java开发中,动态代理和CGLIB代理是两种常见的面向切面编程(AOP)实现方式,它们都用于在不修改原有代码的情况下,增强或扩展对象的功能。本篇文章将深入探讨JDK动态代理和CGLIB代理的区别,以及它们在实际应用中...
此外,还可以了解到一些高级特性,如动态代理、反射、类加载器等的实现细节。 总之,研究Java JDK的源代码是一项深入学习之旅,可以让我们从源头上理解Java的运行机制,提升编程能力,解决实际问题。这不仅仅是对...
- **CGLIB代理**:适用于未实现接口的类,通过继承的方式来实现代理功能,但可能会导致继承层次结构变得复杂。 - **AspectJ**:提供了更为强大的AOP支持,可以实现更复杂的切面逻辑,但在使用上相对复杂。 综上所述...
1.6版本是Java的一个重要里程碑,它引入了许多增强特性,如改进的内存管理、新的并发工具、动态代理类、NIO.2(New I/O API)等。 4. **CHM文档特点** CHM文档有以下几个优势: - 离线访问:可以随时查阅,无需...
CGLIB 动态代理可以代理没有接口的类,這是因为 CGLIB 动态代理可以生成一个原类的子类,然后 override 原类的方法来实现代理。 在 Spring AOP 框架中,默认情况下,Spring 会选择使用 JDK 动态代理,但是如果目标...
**JDK代理**是基于接口的代理,它通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。当我们的目标对象实现了特定的接口时,我们可以使用JDK动态代理来创建该对象的代理。以下是JDK...