1、接口
/** * 用户管理接口 * */ public interface UserManager { // 新增用户抽象方法 void addUser(String userName, String password); }
2、实现类
/** * 用户管理实现类,实现用户管理接口 * */ public class UserManagerImpl implements UserManager { @Override public void addUser(String userName, String password) { System.out.println("调用了新增的方法!"); System.out.println("传入参数为 userName: " + userName + " password: " + password); } }
3、jdk动态代理类和测试
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * JDK动态代理 * */ public class JdkProxy implements InvocationHandler { // 需要代理的目标对象 private Object target ; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("JDK动态代理,监听开始!"); Object result = method.invoke(target, args); System.out.println("JDK动态代理,监听结束!"); return result; } /** * 获取代理对象 * * @param targetObject 目标对象 * @return Object */ private Object getJDKProxy(Object targetObject){ this.target = targetObject; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this); } public static void main(String[] args) { JdkProxy jdkProxy = new JdkProxy(); // 获取代理对象 UserManager user = (UserManager) jdkProxy.getJDKProxy(new UserManagerImpl()); // 执行新增方法 user.addUser("admin", "1234"); } }
// 结果
JDK动态代理,监听开始!
调用了新增的方法!
传入参数为 userName: admin password: 1234
JDK动态代理,监听结束!