这几天一直在研究aop的问题,发现aop的基础是java的动态代理类,一个例子如下
1.一个接口
public interface HelloWorld {
void sayHelloWorld();
}
2.该接口实现类
public class HelloWorldImpl implements HelloWorld {
public void sayHelloWorld() {
System.out.println("Hello World!");
}
}
3.处理类,类中包括了前置和后置方法
package proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class HelloWorldHandler implements InvocationHandler {
// 要代理的原始对象
private Object objOriginal;
/**
** 构造函数
*/
public HelloWorldHandler(Object obj) {
this.objOriginal = obj;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result;
// 方法调用之前
doBefore();
//调用原始对象的方法
result = method.invoke(this.objOriginal ,args);
//方法调用之后
doAfter();
return null;
}
private void doBefore()
{
System.out.println("before method invoke!");
}
private void doAfter()
{
System.out.println("after method invoke!");
}
}
4.测试类
package proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
HelloWorld hw=new HelloWorldImpl();
InvocationHandler handler=new HelloWorldHandler(hw);
//创建动态代理对象
HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(
hw.getClass().getClassLoader(),
hw.getClass().getInterfaces(),
handler);
proxy.sayHelloWorld();
}
}
分享到:
相关推荐
- `Proxy`类是Java提供的动态代理的工厂,它可以根据一个接口生成实现了该接口的代理类的对象。这个代理类会动态地生成并实现接口的所有方法。 - `InvocationHandler`接口定义了一个处理方法调用的回调方法`invoke...
在Java中,静态代理是通过定义一个与被代理类实现相同接口的新类来实现的,而动态代理则在运行时动态生成此类,无需预先编写代理类的代码。 `java.lang.reflect.Proxy`类是Java动态代理的核心,它提供了创建代理...
3. 创建代理类:使用`Proxy.newProxyInstance()`生成代理类的实例,传入类加载器、接口数组和自定义的`InvocationHandler`实例。 4. 使用代理对象:通过代理对象调用方法,实际上会触发`InvocationHandler`的`invoke...
动态代理及其生成的代理类,可以反编译查看其类的结构。
Java动态代理基于Java反射机制,可以在运行时动态地创建代理类和代理对象。与静态代理(即手动编写代理类)相比,动态代理无需预先为每个接口编写单独的代理类,使得代码更加灵活且易于维护。 2. **代理接口** 在...
Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以作为原有对象的“中间人”,在调用原有方法前或后执行额外的操作,如日志记录、性能监控、事务管理等。动态代理在很多...
Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理对象,这些代理对象可以扩展或增强已存在的接口实现。动态代理在处理AOP(面向切面编程)场景、事件监听、性能监控等方面有着广泛的应用。下面我们将...
2. **获取动态代理类**:使用`Proxy.getProxyClass()`或`Proxy.newProxyInstance()`方法,传入类加载器、接口列表以及`InvocationHandler`实例,创建动态代理类。 3. **创建动态代理实例**:通过动态代理类的构造...
- **静态方法:** `newProxyInstance`方法用于创建代理类实例,该方法接收三个参数: - `ClassLoader loader`: 定义代理类的类加载器。 - `Class[] interfaces`: 代理类要实现的接口列表。 - `InvocationHandler h`...
Java动态代理是Java语言提供的一种在运行时创建代理对象的技术,它允许我们为已存在的接口创建代理类,以便在调用方法时添加额外的功能或控制。动态代理在很多场景下非常有用,比如日志记录、性能监控、事务管理等。...
Java动态代理是Java语言提供的一种在运行时创建代理对象的技术,它允许我们为已存在的接口创建代理类,以便在调用真实目标对象的方法时添加额外的功能或行为。在这个实例中,我们将深入探讨Java动态代理的核心概念,...
- `Proxy.newProxyInstance()`是Proxy类的核心方法,用于创建代理对象。它需要三个参数:一个ClassLoader对象,一个接口数组,以及一个InvocationHandler实例。ClassLoader用于加载代理对象的类,接口数组指定了...
相比静态代理,动态代理更加灵活,因为它是在运行时动态创建代理类。Java的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口提供了动态代理的支持。 1. 定义接口: ```java public ...
`Proxy.newProxyInstance()`方法则用于创建代理对象,它需要`ClassLoader`(加载代理类的类加载器)、`Class[] interfaces`(代理类需要实现的接口数组)和`InvocationHandler`实例作为参数。 示例代码中的`...
不过,Cglib生成代理类的速度比JDK慢,且内存占用稍高。 总结来说,Java动态代理为开发者提供了灵活的代码扩展机制,可以根据实际需求选择适合的实现方式。JDK动态代理适用于接口丰富的场景,而Cglib更适合对性能有...
动态代理是一种在运行时创建代理类的技术。代理类是在程序运行时动态生成的,其字节码来源于以下几个途径: - **字节码操作库**:例如使用CGLIB、ASM等库自动生成代理类的字节码。 - **动态语言支持**:例如使用`...
`Proxy`类用于创建代理类实例,而`InvocationHandler`接口定义了处理代理对象的方法调用的逻辑。 ### 2. 创建代理类 要创建一个动态代理,首先需要实现`InvocationHandler`接口。这个接口有一个方法`invoke()`,当...
Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理类,这些代理类可以扩展或修饰已存在的接口实现。动态代理在处理跨层调用、事务管理、日志记录、性能监控等方面非常有用,尤其在AOP(面向切面编程)...
Java 动态代理机制是Java语言提供的一种在运行时创建代理类和代理对象的机制,主要涉及`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。动态代理通常用于实现AOP(面向切面编程)、事件...