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....

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美团外卖不要辣椒给放了怎么办 旺旺卖家拒收我的消息怎么办 淘宝清空购物车大奖到上限了怎么办 游戏无响应除了退出还能怎么办 淘宝给差评了卖家一直打电话怎么办 电脑说带宽问题无法观看视频怎么办 手机淘宝上的购买信息删除了怎么办 为什么支付宝有钱淘宝付不了怎么办 苹果平板电脑上的淘宝点不开怎么办 淘宝付了两次款只有一个订单怎么办 淘宝付款显示支付宝账号异常怎么办 手机老卡换新卡淘宝付不了款怎么办 淘宝买东西退款卖家拒绝退款怎么办 淘宝店铺收藏图片怎么点不了怎么办 手机淘宝显示用户被限制登录怎么办 淘宝设置登录密码原密码忘了怎么办 斑马智行淘宝号换没法登录了怎么办 淘宝卖家手机版显示宝贝不全怎么办 在电脑上登的淘宝账号退不了怎么办 淘宝买家退款不退货写假货怎么办 淘宝卖家已发布商品没货了怎么办 京东换货附近没有京东自提点怎么办 一直显示手机淘宝已停止运行怎么办 唯品会买了不可以退货的衣服怎么办 淘宝店卖东西邮费太贵怎么办 支付宝登录上去必须手机验证怎么办 支付宝里的钱被盗了怎么办 淘宝绑定的支付宝账号忘记了怎么办 支付宝绑定的微博账号忘记了怎么办 怎么知道自己的淘宝密码忘了怎么办 更换扣扣头像图片太大放不下怎么办 每次登入淘宝都要手机验证码怎么办 手机停机收不到唯品会验证码怎么办 魅蓝手机账户密码忘了怎么办 支付宝登录失败请稍后再试怎么办 万王之王3d限制注册了怎么办 绑定手机号无法登陆以前微信怎么办 手机号注册了淘宝如果不用了怎么办 淘宝网登陆要手机验证码怎么办 手机清理了微信图片打不开了怎么办 到淘宝网买东西卖家拒绝退货怎么办