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