动态代理

不羁的心 提交于 2020-03-23 18:52:08
理解: 动态代理它可以直接给某一个目标(被代理 对象)对象(实现了某个或者某些接口)生成一个代理对象,而不需要代理类存在
基本作用:比较好用来添加一些额外的功能
  1. 先建立一个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.运行结果

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!