java动态代理
来源:互联网 发布:淘宝商家发票 编辑:程序博客网 时间:2024/05/20 18:51
java代理可以分为两种:静态代理和动态代理;目前java的代理都是针对接口实现的,对非接口类没有提供实现,可以参考cglib,它是针对类的实现代理的
静态代理:自己手动实现代理功能
动态代理:通javaAPI是提供的工具包实现
静态代理实现示例:
package com.java.proxy;
/**
* 定义接口
* @author
*
*/
public interface Zoo{
public void queryAnimal();
public void addAnimal();
}
package com.java.proxy;
/**
* 创建实现类
* @author
*
*/
public class ZooImpl implements Zoo {
@Override
public void queryAnimal() {
System.out.println("查询动物园中的动物。。。。。");
}
@Override
public void addAnimal() {
System.out.println("向动物园中添加动物。。。。。");
}
}
package com.java.proxy;
/**
* 创建静态代理实现类
* @author
*
*/
public class ZooStaticProxy implements Zoo{
private ZooImpl zil;
public ZooStaticProxy(ZooImpl zil) {
this.zil = zil;
}
@Override
public void queryAnimal() {
System.out.println("queryAnimal before");
zil.queryAnimal();
System.out.println("queryAnimal after");
}
@Override
public void addAnimal() {
System.out.println("addAnimal before");
zil.addAnimal();
System.out.println("addAnimal after");
}
}
package com.java.proxy;
public class ZooProxyTest {
public static void main(String[] args) {
/*静态代理测试*/
ZooStaticProxy zsp = new ZooStaticProxy(new ZooImpl());
zsp.queryAnimal();
zsp.addAnimal();
}
}
测试:
queryAnimal before
查询动物园中的动物。。。。。
queryAnimal after
addAnimal before
向动物园中添加动物。。。。。
addAnimal after
动态代理实现示例:
package com.java.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ZooDynamicProxy implements InvocationHandler{
private Object target;
public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Proxy before....");
Object result = method.invoke(target, args);
System.out.println("Proxy after....");
return result;
}
}
package com.java.proxy;
public class ZooProxyTest {
public static void main(String[] args) {
/*静态代理测试*/
ZooStaticProxy zsp = new ZooStaticProxy(new ZooImpl());
zsp.queryAnimal();
zsp.addAnimal();
/*动态代理测试*/
ZooDynamicProxy cdp = new ZooDynamicProxy();
Zoo zoo = (Zoo)cdp.bind(new ZooImpl());
zoo.queryAnimal();
zoo.addAnimal();
}
}
测试:
queryAnimal before
查询动物园中的动物。。。。。
queryAnimal after
addAnimal before
向动物园中添加动物。。。。。
addAnimal after
Proxy before....
查询动物园中的动物。。。。。
Proxy after....
Proxy before....
向动物园中添加动物。。。。。
Proxy after....
- Java 代理,动态代理
- [Java] Java 动态代理
- java代理及动态代理
- java代理模式--动态代理
- Java静态代理、动态代理
- Java 代理之 动态代理
- Java 代理与动态代理
- java静态代理,动态代理
- 代理模式&java动态代理
- Java代理与动态代理
- Java静态代理动态代理
- JAVA代理模式--动态代理
- java 代理和动态代理
- JAVA动态代理 代理模式
- Java动态代理--jdk代理
- Java动态代理--cglib代理
- Java 代理与动态代理
- java代理模式-动态代理
- 方式的缸发动机,公开的房间里的
- hadoop中使用MapReduce编程实例(转)
- NSMutableString的使用方法
- javascript_dom编程艺术第六章图片库实例笔记。
- 2014-08-08 一期笔记
- java动态代理
- HDOJ 题目1087Super Jumping! Jumping! Jumping!(动态规划)
- Delphi利用ADO连接数据库报错“bof或eof中有一个是真,或者当前记录已被删除,所需的操作要求一个当前的操作”
- 为什么中断不能休眠
- VSFlexGrid 控件属性方法一览表(带()为方法)
- Erlang类型及函数声明规格 以及dialyzer的使用
- C# NameValueCollection集合
- 字符输入注意点
- SQL插入查询结果 insert into select