動態代理


理解: 動態代理它可以直接給某一個目標(被代理 對象)對象(實現了某個或者某些接口)生成一個代理對象,而不需要代理類存在
基本作用:比較好用來添加一些額外的功能
  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