动态代理


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM