好的,下面是基于接口的动态代理示例代码:
```java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public interface UserService {
void addUser(String username, String password);
}
public class UserServiceImpl implements UserService {
@Override
public void addUser(String username, String password) {
System.out.println("添加用户:" + username + ", 密码:" + password);
}
}
public class UserServiceProxy implements InvocationHandler {
private Object target;
public UserServiceProxy(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("开始执行方法:" + method.getName());
Object result = method.invoke(target, args);
System.out.println("方法执行完成:" + 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("admin", "123456");
}
}
```
在上面的示例中,我们定义了一个UserService接口和它的实现类UserServiceImpl。然后,我们创建了一个UserServiceProxy类来实现InvocationHandler接口,并在其中添加了额外的逻辑,如打印日志等。最后,我们使用Proxy.newProxyInstance()方法来创建代理对象,并将代理对象转换为UserService类型,从而实现了对UserService接口的动态代理。