完整代码案例给出一个使用JDK动态代理的例子。
时间: 2024-02-03 07:14:55 浏览: 25
好的,下面是一个使用 JDK 动态代理的示例代码:
首先我们需要定义一个接口,如下所示:
```java
public interface UserService {
void addUser(String username, String password);
void deleteUser(String username);
}
```
然后我们实现这个接口:
```java
public class UserServiceImpl implements UserService {
public void addUser(String username, String password) {
System.out.println("添加用户:" + username + ",密码:" + password);
}
public void deleteUser(String username) {
System.out.println("删除用户:" + username);
}
}
```
接下来是使用 JDK 动态代理的关键代码:
```java
public class UserServiceProxy implements InvocationHandler {
// 目标对象
private Object target;
public Object bind(Object target) {
this.target = target;
// 通过反射机制,创建代理对象
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
/**
* 代理方法
* @param proxy 代理对象
* @param method 被代理的方法
* @param args 方法参数
*/
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;
}
}
```
使用时,我们需要先创建一个 UserServiceImpl 对象,然后再创建一个 UserServiceProxy 对象,并将 UserServiceImpl 对象传递给它的 bind 方法。最后,调用 UserService 接口中的方法即可:
```java
public class Test {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
UserServiceProxy userServiceProxy = new UserServiceProxy();
UserService proxy = (UserService) userServiceProxy.bind(userService);
proxy.addUser("Tom", "123456");
proxy.deleteUser("Tom");
}
}
```
输出结果如下:
```
执行方法 addUser 前的业务处理
添加用户:Tom,密码:123456
执行方法 addUser 后的业务处理
执行方法 deleteUser 前的业务处理
删除用户:Tom
执行方法 deleteUser 后的业务处理
```