首先写一个接口:
package net.test.dynamicproxy;
public interface UserManager {
public void addUser(String username,String password);
public void deleteUser(String id);
}
然后写这个接口的实现类:
package net.test.dynamicproxy;
public class UserManagerImpl implements UserManager {
@Override
public void addUser(String username, String password) {
System.out.println("增加的用户名:"+username+" 密码:"+password);
}
@Override
public void deleteUser(String id) {
System.out.println("删除用户");
}
}
然后再写一个代理类,这个类实现了InvocationHandler接口:
package net.test.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class UserManagerHandler implements InvocationHandler {
private Object targetObject;//表示代理实例
/**
*返回一个代理实例
*/
public Object newProxy(Object targetObject){
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);
}
/**
*这个代理类被实例化后会自动调用这个invoke(..)方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
checkRole();
Object returnValue = null;
try{
method.invoke(targetObject, args);//这个方法必须要写,否则就无法实现代理,表示调用代理类的方法
}catch(RuntimeException e){
System.out.println(e);
}
return null;
}
public void checkRole(){
System.out.println("--------------检查权限-------");
}
}
测试:
package net.test.dynamicproxy;
public class Client {
public static void main(String args[]){
UserManagerHandler handler = new UserManagerHandler();
UserManager manager = (UserManager)handler.newProxy(new UserManagerImpl());
manager.addUser("hahaha", "yyd");
manager.deleteUser("110");
}
}
运行结果:
--------------检查权限-------
增加的用户名:hahaha 密码:yyd
--------------检查权限-------
删除用户
动态代理
最新推荐文章于 2025-03-19 08:00:00 发布