基于接口的动态代理----JDK动态代理
时间: 2024-10-08 09:11:12 浏览: 24
代理模式-静态动态代理-jdk动态代理-cglib动态代理
基于接口的动态代理是Java语言提供的一个强大的特性,它允许我们在运行时创建新的代理对象,这个代理对象实现了我们指定的一系列接口,并且可以拦截并修改接口方法的执行过程。这一功能主要通过`java.lang.reflect.Proxy`和`InvocationHandler`接口来实现。
以下是基本步骤:
1. **定义接口**:首先,你需要确定要代理的接口,这个接口将作为代理对象的行为规范。
```java
public interface MyInterface {
void doSomething();
}
```
2. **创建InvocationHandler**:这是核心部分,它包含了对实际方法的处理逻辑。当接口方法被调用时,会先传递给InvocationHandler,然后你可以在这里添加自定义行为。
```java
InvocationHandler handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before method call");
Object result = method.invoke(target, args);
System.out.println("After method call");
return result;
}
};
```
3. **创建代理对象**:使用`Proxy.newProxyInstance()`方法,传入接口、InvocationHandler实例以及目标对象(如果有的话),返回一个新的代理对象。
```java
MyInterface target = ...; // 实现MyInterface的对象
MyInterface proxy = (MyInterface) Proxy.newProxyInstance(
MyInterface.class.getClassLoader(),
new Class[]{MyInterface.class},
handler
);
```
4. **使用代理对象**:现在你可以像使用普通接口一样,调用代理对象的方法了,实际上会触发InvocationHandler的`invoke`方法。
```java
proxy.doSomething();
```
阅读全文