package com.gh.dynaproxy;

 import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 动态代理类
* @author ganhang
*
*/
public class DynaProxy implements InvocationHandler{
private Object ob;//被代理对象
public DynaProxy(Object ob){
this.ob=ob;
}
private void before(){
System.out.println("为代理对象找对象中。。");
}
private void after(){
System.out.println("相亲完成。。");
} @Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj=null;
before();
obj=method.invoke(ob, args);//真正调用业务方法
after();
return obj;
}
}
 package com.gh.dynaproxy;
/**
* 被代理类
* @author ganhang
*
*/
public class Person implements Subject{
private String name;
public Person(String name){
this.name=name;
}
@Override
public void miai() {
System.out.println(name+"正在相亲中...");
} }
 package com.gh.dynaproxy;
/**
* 要代理的主题接口
* @author ganhang
*
*/
public interface Subject { public void miai(); }
 package com.gh.dynaproxy;

 import java.lang.reflect.Proxy;
/**
* 动态代理
* @author ganhang
*
*/
public class test {
public static void main(String[] args){
Person p=new Person("小白");
DynaProxy dp=new DynaProxy(p);
//Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类
//newProxyInstance(定义代理类的类加载器,代理类要实现的接口列表,InvocationHandler接口)
//返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。它由指定的类加载器定义,并实现指定的接口
Subject s=(Subject)Proxy.newProxyInstance(p.getClass().getClassLoader(), p.getClass().getInterfaces(),dp);
s.miai();
}
}

java学习之动态代理模式的更多相关文章

  1. Java学习之动态代理篇

    Java学习之动态代理篇 0x00 前言 在后面的漏洞研究的学习中,必须要会的几个知识点.反射机制和动态代理机制.至于反射的前面已经讲到过了,这里就不做更多的赘述了. 0x01 动态代理 这里先来讲一 ...

  2. Java学习笔记--动态代理

    动态代理 1.JDK动态代理 JDK1.3之后,Java提供了动态代理的技术,允许开发者在运行期创建接口的代理实例.JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy ...

  3. Java学习笔记——动态代理

    所谓动态,也就是说这个东西是可变的,或者说不是一生下来就有的.提到动态就不得不说静态,静态代理,个人觉得是指一个代理在程序中是事先写好的,不能变的,就像上一篇"Java学习笔记——RMI&q ...

  4. Java设计模式—Proxy动态代理模式

    代理:设计模式 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 图 1. 代 ...

  5. JAVA学习之动态代理

    JDK1.6中的动态代理 在Java中Java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成一个动态代理对象.JDK提供 ...

  6. 关于java动态代理模式

    1. 动态代理 动态代理就是通过代理类是代理类与相关接口不直接发生联系,而在运行期(Runtime)实现动态关联. 动态代理主要用到java.lang.reflect包中的两个类,Invocation ...

  7. JAVA动态代理模式(从现实生活角度理解代码原理)

    所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联. java动态代理主要是使用java.lang.reflect包中的两个 ...

  8. 黑马程序员:Java基础总结----静态代理模式&动态代理

    黑马程序员:Java基础总结 静态代理模式&动态代理   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public  class  Ts {   ...

  9. Java静态代理与动态代理模式的实现

    前言:    在现实生活中,考虑以下的场景:小王打算要去租房,他相中了一个房子,准备去找房东洽谈相关事宜.但是房东他很忙,平时上班没时间,总找不到时间去找他,他也没办法.后来,房东想了一个办法,他找到 ...

随机推荐

  1. [Jobdu] 题目1361:翻转单词顺序

    题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“stu ...

  2. UVA1471( LIS变形)

    这是LIS的变形,题意是求一个序列中去掉某个连续的序列后,能得到的最长连续递增序列的长度. 用DP的解法是:吧这个序列用数组a来记录,再分别用两个数组f记录以i结尾的最长连续递增序列的长度,g[i]记 ...

  3. quartz 定时调度持久化数据库配置文件

    1 下载quartz对应版本jar包 2 初始化对应数据库sql(版本需要对应,不然会出现少字段的情况) ,下载地址  https://github.com/quartz-scheduler/quar ...

  4. 如何避免JSP乱码

    如何解决JavaWeb乱码问题   作为一个合格的web开发人员应该是什么问题都遇到过的,尤其是乱码问题.大家也许都体会到了,我们中国人学编程,很大的一个不便就是程序的编码问题,无论学习什么技术,我们 ...

  5. poj 3243 Clever Y 高次方程

    1 Accepted 8508K 579MS C++ 2237B/** hash的强大,,还是高次方程,不过要求n不一定是素数 **/ #include <iostream> #inclu ...

  6. 帝国cms7.0调用指定栏目,指定顺序排列

    [e:loop={"select * from {$dbtbpre}enewsclass where classid in (82,83,86,87,88,89,90,91,93) orde ...

  7. JAVA GUI学习 - 总结

    一:项目 二:重要组件补充 三:组件高级操作

  8. Libev学习笔记3

    设置完需要监听的事件之后,就开始event loop了.在Libev中,该工作由ev_run函数完成.它的大致流程如下: int ev_run (EV_P_ int flags) { do { /* ...

  9. weblogic的ejb远程调用

    这是一篇对EJB远程调用的简单范例.      1.环境:win7  + weblogic 12c + myeclipse8.5      2.目的:实现在myeclispe中对weblogic中EJ ...

  10. C#--遍历目录实例

    鉴于前面几篇博客都说了,这边就啥都不说了.直接就開始贴代码了. 1.控件解释: FolderBrowserDialog控件一个----用来显示"浏览目录"对话框 TextBox控件 ...