package com.aop.jdk; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * 在JDK1.3以后在他java.lang.reflect里面提供了一个口InvocationHandler 和一个Proxy类 * 1:它是基于接口编程。你类必须要要有一个接口(必要条件)(IUserDao必须是一个接口) * 2:Handler类,专门去处理所以的类,通过反射动态执行对应目标类的方法(UserServiceImpl的对象),它 * 必须要实现一个接口InvocationHandler * public Object invoke(Object proxy, Method method, Object[] args) * 3:通过代理类动态执行接口里面 * */ public class UserHandler implements InvocationHandler{ private Object target; public UserHandler(Object target){ this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("在调用方法之前执行"); Object object = method.invoke(target, args); System.out.println("在调用方法之后执行"); return object; } }
package com.aop.jdk; import java.lang.reflect.Proxy; public class Test { public static void main(String[] args) { IUserDao userDao = new UserDaoImpl(); UserHandler userHandler = new UserHandler(userDao); IUserDao proxy = (IUserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(), userHandler); User user = new User(); proxy.saveUser(user); System.out.println("================"); proxy.deleteUser(1); System.out.println("================"); proxy.updateUser(1, user); } }