java的Proxy
时间: 2023-11-10 13:02:31 浏览: 96
Java的Proxy是一种设计模式,它允许代理对象控制其所代表的真实对象的访问。通过使用Java的Proxy,可以在不改变原始类代码的情况下,向其添加额外功能或限制对其的直接访问。
Java中的Proxy是通过java.lang.reflect.Proxy类实现的。使用Proxy创建代理对象时,需要实现一个InvocationHandler接口,该接口包含了一个invoke方法,用于拦截代理对象的所有方法调用,并在必要时进行处理。
例如,下面是一个使用Java Proxy的示例:
```java
public interface UserService {
void addUser(String name);
}
public class UserServiceImpl implements UserService {
public void addUser(String name) {
System.out.println("Add user: " + name);
}
}
public class UserServiceProxy implements InvocationHandler {
private Object target;
public UserServiceProxy(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before method " + method.getName());
Object result = method.invoke(target, args);
System.out.println("After method " + method.getName());
return result;
}
}
public class Main {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
UserService proxy = (UserService) Proxy.newProxyInstance(
userService.getClass().getClassLoader(),
userService.getClass().getInterfaces(),
new UserServiceProxy(userService)
);
proxy.addUser("Alice");
}
}
```
输出结果为:
```
Before method addUser
Add user: Alice
After method addUser
```
在这个示例中,我们创建了一个UserService接口及其实现类UserServiceImpl。然后,我们使用InvocationHandler创建了一个代理UserService的对象UserServiceProxy。最后,我们使用Proxy.newProxyInstance方法创建了一个代理对象proxy,并使用该代理对象调用了UserService的addUser方法。
阅读全文