理解: 动态代理它可以直接给某一个目标(被代理 对象)对象(实现了某个或者某些接口)生成一个代理对象,而不需要代理类存在
基本作用:比较好用来添加一些额外的功能
- 先建立一个interface
/** * */ package little_class; /** * @author 梅肺 */ //一般的操作就是增删改查 public interface UserDao { public abstract void add(); public abstract void delete(); public abstract void update(); public abstract void find(); }
2.再添加它的实现类
/** * */ package little_class; /** * @author 梅肺 */ public class UserImpl implements UserDao{ @Override public void add() { // TODO Auto-generated method stub System.out.println("add"); } @Override public void delete() { // TODO Auto-generated method stub System.out.println("delete"); } @Override public void update() { // TODO Auto-generated method stub System.out.println("update"); } @Override public void find() { // TODO Auto-generated method stub System.out.println("find"); } }
3.再尝试写一个测试类
/** * */ package little_class; import java.lang.reflect.Proxy; /** * @author 梅肺 */ //要想理解下面的代码,要对invacationHanler和proxy有一定的了解 public class Test { public static void main(String[] args) { UserDao ud = new UserImpl(); MyInvacationHandler handler = new MyInvacationHandler(ud); UserDao proxy = (UserDao) Proxy.newProxyInstance(ud.getClass().getClassLoader(), ud.getClass().getInterfaces(), handler); proxy.add(); proxy.delete(); proxy.find(); proxy.update(); } }
4.还是要为了动态代理写一个实现(接口)InvacationHandler的类
/** * */ package little_class; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * @author 梅肺 */ public class MyInvacationHandler implements InvocationHandler { private Object target;//目标对象 public MyInvacationHandler(Object target) { // TODO Auto-generated constructor stub this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println("dynamic proxy"); Object resultObject = method.invoke(target, args); return resultObject; } }
5.运行结果
来源:https://www.cnblogs.com/xiaolongdejia/p/11183563.html