java 的静态代理和动态代理

原创 2018年04月16日 17:39:21

静态代理:客户,中介,房东租房场景的例子:

//抽象的接口类

package cn.thomson.proxy;

public interface rent {

public void rent();

}

//房东出租此屋

package cn.thomson.proxy;

public class Host implements rent {
  public void rent(){
 System.out.println("出租此屋");

  }

//中介租屋

package cn.thomson.proxy;
public class Proxy implements rent{
    private  Host host;
    public Proxy(Host host) {
this.host=host;
}
public void rent(){
seeHouse();
    host.rent();
    getMoney();    
    }    
public void seeHouse(){
System.out.println("参观此屋");
}
public void getMoney(){
System.out.println("收取中介费");
}

}

租房客户(测试类)

package cn.thomson.proxy;
public class Customer {
public static void main(String[] args) {
Host host=new Host();
Proxy proxy=new Proxy(host);
        proxy.rent();
}

}

中介只具有参观此屋和收取中介费的功能。但是打印信息如下:


此为静态代理模式。代理和代理对象实现相同的抽象方法。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

动态代理模式:

//抽象类

package ProxyFactory;

public interface IUserDao {

 void save();

}

//实现抽象方法

package ProxyFactory;
public class UserDao implements IUserDao {
@Override
public void save() {
// TODO Auto-generated method stub
System.out.println("已经保存数据");
}

}

//代理类

package ProxyFactory;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;
public class proxyFactory {
//目标对象
private  Object target;
public proxyFactory(Object target) {
super();
this.target = target;
}
//目标对象和代理对象关联
    public Object getInstance(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println(“事物1”);

Object obj=method.invoke(target, args);

                           System.out.println(“事物2”);

return obj;          

}});    
    }
}

//测试类

package ProxyFactory;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//目标对象
IUserDao target=new UserDao();
IUserDao proxy=(IUserDao)new proxyFactory(target).getInstance();
proxy.save();
}

}

测试结果为:


《C语言/C++学习指南》动态库和静态库

介绍动态库和静态库的基本概念,制作和使用方法,手工加载动态库方法,如何导出函数和类,以及VC的静态编译等等
  • 2015年07月15日 15:57

Java代理模式详解及案例分析:静态代理/动态代理

标题:Java代理模式详解及案例分析:静态代理/动态代理 我们以几个问题,来开始我们今天的学习,如果下面几个问题,你都能说出个一二,那么恭喜你,你已经掌握了这方面的知识。 1,什么是代理模式? 2,...
  • reggergdsg
  • reggergdsg
  • 2016-11-03 19:56:58
  • 1955

静态代理和动态代理的理解

Java 静态代理 静态代理通常用于对原有业务逻辑的扩充。比如持有二方包的某个类,并调用了其中的某些方法。然后出于某种原因,比如记录日志、打印方法执行时间,但是又不好将这些逻辑写入二方包的方法里...
  • WangQYoho
  • WangQYoho
  • 2017-08-25 18:04:24
  • 4964

java代理(静态代理和jdk动态代理以及cglib代理)

说到代理,脑袋中浮现一大堆代理相关的名词,代理模式,静态代理,jdk代理,cglib代理等等。 记忆特别深刻的是,一次面试中,一位面试官问我,spring的AOP核心采用的设计模式是什么什么模式,阅读...
  • fighterandknight
  • fighterandknight
  • 2016-04-20 17:34:56
  • 5813

JAVA学习篇--静态代理VS动态代理

本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢?原因:1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者的区...
  • hejingyuan6
  • hejingyuan6
  • 2014-07-01 20:36:04
  • 40950

java静态代理与动态代理的区别

java静态代理和动态代理 本文动态代理部分内容大量引自:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/  一、代理概念 ...
  • u014381710
  • u014381710
  • 2015-10-25 22:15:22
  • 2417

动态代理和静态代理到底有什么区别,好处在哪里?

动态代理和静态代理到底有什么区别,好处在哪里?
  • mine_song
  • mine_song
  • 2017-05-07 21:05:19
  • 3455

Java设计模式之—静态代理和动态代理

代理从字面意思来看就是,替代XX去做某事,在我们的程序中,一般替代实际对象去进行操作,扮演着中间人的角色: 客户端 –> 业务类 客户端 –> 代理 –>业务类(代理) 代理接口int...
  • jeffleo
  • jeffleo
  • 2016-08-17 00:08:35
  • 1092

动态代理与静态代理区别

一、代理概念  为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委...
  • ikownyou
  • ikownyou
  • 2016-11-08 13:47:14
  • 7489

java反射の动态代理与静态代理

静态代理弊端: 之前博客中有讲静态代理机制的,特征是代理类和目标对象的类都是在编译期间确定下来的,不利于程序的扩展。同时,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理   ...
  • u010892841
  • u010892841
  • 2016-06-06 14:57:15
  • 426
收藏助手
不良信息举报
您举报文章:java 的静态代理和动态代理
举报原因:
原因补充:

(最多只允许输入30个字)