最近看到一篇博客讲了java动态代理。以前没接触过这个概念,于是小小的研究了下。源码部分下次研究哈。
java代理分两种
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。
动态代理:在程序运行时,运用反射机制动态创建而成。
这里讲动态代理
demo
一、创建接口类 AnimalDao
public interface AnimalDao {
public void call();
}
二、创建接口实现类 AnimalDaoImpl
public class AnimalDaoImpl implements AnimalDao{
@Override
public void call() {
System.out.println("主人来了");
}
}
三、创建使用类 AnimalHandler
AnimalHandler 实现 InvocationHandler接口
public class AnimalHandler implements InvocationHandler {
private Object obj;
public AnimalHandler(Object obj){
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("主人推开门之前");
Object result = method.invoke(obj, args);
System.out.println("主人推开门之后");
return result;
}
}
四、测试类
public class AnimalTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
AnimalDao pDao = new AnimalDaoImpl();
AnimalHandler handler = new AnimalHandler(pDao);
AnimalDao proxy = (AnimalDao)Proxy.newProxyInstance(pDao.getClass().getClassLoader(), pDao.getClass().getInterfaces(), handler);
proxy.call();
}
}
五、运行输出