1.先创建一个接口user
public interface User { /** * 生成用户 */ void generate(); /** * 修改用户信息 */ void modify(); /** * 查看用户详情 */ void detail(); }
创建 关于User接口的实现类UserImpl
public class UserImpl implements User { @Override public void generate() { System.out.println("用户生成"); } @Override public void modify() { System.out.println("用户修改信息"); } @Override public void detail() { System.out.println("查看用户信息"); } }
创建一个UserClient用于测试
public class UserClient { public static void main(String[] args) { //创建目标对象,用User接口new一个新的接口实现类,方便调用接口 User user = new UserImpl(); } }
JDK动态代理技术主要用来
2.这时候我们就需要新建一个类UserInvocationHandler 来实现InvocationHandler(处理器)接口
public class UserInvocationHandler implements InvocationHandler { //创建一个对象,并且提供一个构造方法 private Object aa; public UserInvocationHandler(Object aa) { this.aa = aa; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = method.invoke(aa, args); return null; } }
3.在测试类中UserClient中使用
public class UserClient { public static void main(String[] args) { //创建目标对象 User user = new UserImpl(); //创建代理对象 //Object proxyObj = Proxy.newProxyInstance(类加载器, 代理类要实现的接口, 调用处理器) User u = (User) Proxy.newProxyInstance(user.getClass().getClassLoader(), user.getClass().getInterfaces(),new UserInvocationHandler(user)); //调用detail()方法 u.detail(); } }
4.我们在UserInvocationHandler类中method.invoke(aa, args)调用上面给的对象(aa)添加输出,并且给这个调用赋值,我们添加增强代码的目的完成
public class UserInvocationHandler implements InvocationHandler { private Object aa; public UserInvocationHandler(Object aa) { this.aa = aa; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //此处接口的目的就是为了写增强代码 System.out.println("开始了"); Object result = method.invoke(aa, args); System.out.println("结束了"); return null; } }
5.调用方法