- 浏览: 168412 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (157)
- 心情故事 (2)
- SWT/JFACE/RCP (5)
- 数据库 持久层 (22)
- 程序开发的小常识 (17)
- 设计模式 (6)
- UML图 (1)
- 框架相关文章 (15)
- 消息服务 (3)
- javascript ajax jquery (12)
- servlet http 协议 (1)
- 中间件 服务器 JNDI (11)
- EJB (4)
- core JAVA jvm (17)
- 算法 算数 智力题 (5)
- 版本控制软件 (1)
- 软件下载 (15)
- quartz job (2)
- xml (2)
- 线程 (9)
- 英语专栏学习 (0)
- SWT/JFACE/RCdP (0)
- Unix (1)
- Maven (3)
- 第一段经历 (0)
- 第二段经历 (0)
- 第三段经历 (0)
- 第四段经历 (9)
- ide开发工具 (2)
- 浏览器兼容 (1)
- 技术的缺点总结 (1)
- 验证码 (1)
- 面试问题大全 (3)
- 第五段经历 (5)
- 趣味编程 (1)
最新评论
-
zhangwei8607:
哥,我来了
发表了这么多技术文章,为什么没人留言 -
aqqcat:
这个太骚了同志
proxy 的原理 -
dmwdmc:
...
9个球其中1个空心最多称2次得出空心球 -
kjmmlzq19851226:
9个球分三组为A、B、C,任意取其中两组进行第一次称重,两种情 ...
9个球其中1个空心最多称2次得出空心球 -
zhangwei8607:
:idea: 学习了
网银系统augcb申请信用卡ejb的应用
设计模式中proxy模式可以在jdk中的proxy得到体现。
它也是spring的核心思想。
首先我定义个ActionPrettyWomanInterface 接口。
针对于这个接口,我们可以有多个实现。
一个是帮助美女的实现。
另一个是玩美女。
public class PlayPrettyWoman implements ActionPrettyWomanInterface{
public void action() {
System.out.println("我在玩美女.");
}
}
那么我们只是简单的玩,是不是太没情调了呢。
这时候我们就可以通过代理机制里的InvocationHandler加入一些情调。
之后我们就可以大玩特玩了。
控制台输出:
从中我们可以知道,当我们用代理机制创建关于接口或者类的对象时候,
它的对象实现是jdk产生的动态代理对象Proxy0。
当我们要调用玩美女或者帮助美女方法时候, 它的实际顺序是先调用InvocationHandler里的invoke, 然后invoke会通过反射调用玩美女或者帮助美女方法。
得出结论:如果我们不实现InvocationHandler的invoke方法,那么我们实际中的方法讲不会被调用到。所以这个类必须重写。
然后另外我们可以得知,创建对象除了new以后,还可以通过代理实现。
它也是spring的核心思想。
首先我定义个ActionPrettyWomanInterface 接口。
public interface ActionPrettyWomanInterface { void action(); }
针对于这个接口,我们可以有多个实现。
一个是帮助美女的实现。
public class HelpPrettyWoman implements ActionPrettyWomanInterface{ public void action() { System.out.println("我在帮美女补丝袜 ."); } }
另一个是玩美女。
public class PlayPrettyWoman implements ActionPrettyWomanInterface{
public void action() {
System.out.println("我在玩美女.");
}
}
那么我们只是简单的玩,是不是太没情调了呢。
这时候我们就可以通过代理机制里的InvocationHandler加入一些情调。
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class SexyInvocationHandler implements InvocationHandler{ private Object prettyWoman; public SexyInvocationHandler(ActionPrettyWomanInterface prettyWoman){ this.prettyWoman=prettyWoman; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result=null; try{ System.out.println(proxy.getClass().getSimpleName()); System.out.println("让美女穿上丝袜,剪开档."); result =method.invoke(prettyWoman, args); System.out.println("抽跟烟~~~."); }catch(Exception e){ } return result; } }
之后我们就可以大玩特玩了。
import java.lang.reflect.Proxy; public class TestActionWithWoman { public static void main(String[] args) { ActionPrettyWomanInterface playWoman=new PlayPrettyWoman(); ActionPrettyWomanInterface helpWoman=new HelpPrettyWoman(); ActionPrettyWomanInterface fuckProxy=(ActionPrettyWomanInterface)Proxy. newProxyInstance(playWoman.getClass().getClassLoader(), playWoman.getClass().getInterfaces(), new SexyInvocationHandler(playWoman)); fuckProxy.action(); ActionPrettyWomanInterface remedyProxy=(ActionPrettyWomanInterface)Proxy. newProxyInstance(helpWoman.getClass().getClassLoader(), helpWoman.getClass().getInterfaces(), new SexyInvocationHandler(helpWoman)); remedyProxy.action(); System.out.println("fuckProxy classname:"+fuckProxy.getClass().getName()); } }
控制台输出:
引用
$Proxy0
让美女穿上丝袜,剪开档.
我在玩美女.
抽跟烟~~~.
$Proxy0
让美女穿上丝袜,剪开档.
我在帮美女补丝袜 .
抽跟烟~~~.
fuckProxy classname:$Proxy0
让美女穿上丝袜,剪开档.
我在玩美女.
抽跟烟~~~.
$Proxy0
让美女穿上丝袜,剪开档.
我在帮美女补丝袜 .
抽跟烟~~~.
fuckProxy classname:$Proxy0
从中我们可以知道,当我们用代理机制创建关于接口或者类的对象时候,
它的对象实现是jdk产生的动态代理对象Proxy0。
当我们要调用玩美女或者帮助美女方法时候, 它的实际顺序是先调用InvocationHandler里的invoke, 然后invoke会通过反射调用玩美女或者帮助美女方法。
得出结论:如果我们不实现InvocationHandler的invoke方法,那么我们实际中的方法讲不会被调用到。所以这个类必须重写。
然后另外我们可以得知,创建对象除了new以后,还可以通过代理实现。
发表评论
-
ClassLoader 和 反射加载的区别
2014-09-30 15:18 658在websphere中,类加载顺序是 java核心库 shar ... -
实现浏览器安全下载
2013-09-15 18:05 674这种方式比较安全。不会暴露服务器路径。 csvFile为生成好 ... -
会是类无法加载到jvm中去的代码
2013-07-28 14:38 313static { System.exit ... -
jvm 加载同包 类
2013-06-22 06:57 759如果我自己新建立一个类,叫做 java.util.ArrayL ... -
for循环,即使不满足,最后也会递增掉
2013-06-18 20:29 1175public class Test { public st ... -
类的加载过程
2013-06-17 22:08 728load->连接验证->准备->解析-> ... -
Collection 集合 List
2013-06-17 09:13 6301.ArrayList是最常用的List实现类,内部是通过数组 ... -
object 的序列化和反序列化
2013-06-15 19:35 3818首先定义pojo. 这里必须要实现implements jav ... -
equals重载时候注意
2013-06-14 15:48 690第一,先判断传进来的是否为空,空就false. 第二,比较他们 ... -
jvm调优的实际应用
2013-06-11 19:55 1005具体调优,我们可以参照这里一位的文章 http://unixb ... -
父子类的加载顺序和父类参数
2013-06-01 09:53 917public class Father { static ... -
+操作符 不能被byte,short 类型接收
2013-06-01 09:37 687这样可以 public static void main(S ... -
一家银行网站涉及的主要设计模式
2013-05-29 00:24 8171.组合模式 银行金融系统框架这边,我们最常见的就是用配置文件 ... -
简单工厂模式和工厂方法模式
2011-11-21 17:44 7531. 简单工厂模式 publci class S ... -
JAVA replaceAll 去所有空格
2011-11-16 19:51 5179public class Test1_1 { p ... -
泰文保持不乱码
2011-01-28 01:49 5404public class Test1 { publ ... -
observer模式
2010-05-07 14:45 812Observer模式定义对象间的一对多的依赖关系,当一个对象的 ... -
实际中遇到的command模式
2010-05-07 11:42 848Command 命令模式是一种对象行为型模 式,它主要解决 ... -
JAVA的内部类
2010-02-04 17:13 762成员内部类,静态内部类,局部内部类和 匿名内部类。 成员内 ... -
适配模式(Adapter) ,模板模式,桥接模式(Bridge )
2010-02-03 13:15 800适配模式(Adapter) 我想要得到接口A,但是却要类C里的 ...
相关推荐
Proxy原理说明的源码
自己总结的rest-proxy主要的API,主要参考官网。
代理服务器的源程序,只是一个示范,可以了解Proxy原理 program: proxyd module: proxyd.c summary: provides proxy tcp service for a host on an isolated network. programmer: Carl Harris ...
主要介绍了Java动态代理语法Proxy类原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
代理服务器的源程序,只是一个示范,可以了解Proxy原理
一个可以用来制作Hypixel加速线路的工具 自己写的哦 使用方法很简单直接使用java -jar TCP-Proxy.jar启动它就可以了 原理的话是使用Java实现TCP数据转发
代理模式是一种设计模式,其定义是为其他对象提供一种代理以控制对这个对象的访问。 代理模式的核心在于提供一个代理来控制和限制对另一个对象的直接访问。这种模式通常用于以下几种情况: 远程代理:当对象位于...
JDK动态代理proxy的基本工作原理代码!!
该插件为Chrome浏览器实现代理服务的插件,能够实现socks5代理服务的功能。
NULL 博文链接:https://phl.iteye.com/blog/2247856
proxy原理学习 七、com.java.websocket websocket 学习使用 八、com.leetCode.study LeetCode 学习 九、com.redis.study 整合redis学习 十、com.wx.login 微信登录 十一、com.wx.push 微信推送 十二、...
chaos-http-proxy, 通过代理服务器向HTTP请求引入故障 混沌HTTP代理通过代理服务器将失败引入到HTTP请求中。 这可以在HTTP客户机中发现错误处理 Bug 。 Bounce存储 gaul@bouncestorage.com,最初编写了混沌HTTP代理...
d3d hack 可用于d3d hook com函数 原理是替换原d3d dll
一个用来分析使用HTTP和HTTPS协议的应用程序框架 它的原理很简单,WebScarab记录它检测到的会话内容(请求和应答),使用者可以通过多种形式来查看记录。WebScarab的设计目的是让使用者可以掌握某种基于HTTP(S)...
Proxy Server的工作原理是:当客户在浏览器中设置好Proxy Server后,你使用浏览器访问所有WWW站点的请求都不会直接发给目的主机,而是先发给代理服务器,代理服务器接受了客户的请求以后,由代理服务器向目的主机...
Vue中从改变一个数据到页面渲染改变的过程 Vue2 利用definedProperty实现数据绑定 definedProperty 基础使用: var ob={ a:1, b:2 } var _value=ob.a Object.defineProperty(ob,'a',{ //writable:true,//...
介绍Squid应用的书籍,内容很详实。 本书从原理,应用,使用方法进行了描述。
防火墙原理 防火墙主要技术 防火墙体系结构 堡垒主机的作用及部署 数据包过滤规则 状态检测数据包过滤原理 防火墙原理 .1 防火墙的概念 防火墙的功能 边界保护机制 潜在的攻击和可能的对象 4 互操作...