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