Proxy 示例

 1 package cn.proxy03;
 2
 3 import java.lang.reflect.InvocationHandler;
 4 import java.lang.reflect.Method;
 5 import java.lang.reflect.Proxy;
 6 import java.util.ArrayList;
 7 import java.util.List;
 8 /**
 9  * 用代理修改list的add方法  判断添加字符串的首字母是否为J开始
10  * @author ASUS
11  *
12  */
13 public class ListProxy {
14
15     public static void main(String[] args) {
16         //声明被代理的对象
17         final List<String> list = new ArrayList<>();
18         Object object = Proxy.newProxyInstance(ListProxy.class.getClassLoader(),
19                 new Class[]{List.class},
20                 new InvocationHandler() {
21
22                     @Override
23                     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
24                         // 限制:如果调用的是add方法,如果添加的是J则接收
25                         if(method.getName().equals("add")){
26                             if(args[0].toString().startsWith("J")){
27                                 list.add(args[0].toString());
28                                 return true;
29                             }else{
30                                 System.err.println("不接受");
31                                 return false;
32                             }
33                         }else{
34                             return method.invoke(list, args);
35                         }
36                     }
37                 });
38         List<String> listAdd = (List<String>) object;
39         new ListProxy().add(listAdd);
40     }
41
42     public void add(List<String> list){
43         list.add("Jack");
44         list.add("Mary");
45         System.err.println("J开头的字符串个数为:"+list.size());
46     }
47 }

运行结果

时间: 2024-10-14 14:46:07

Proxy 示例的相关文章

Mybatis源码解析,一步一步从浅入深(六):映射代理类的获取

在文章:Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码中我们提到了两个问题: 1,为什么在以前的代码流程中从来没有addMapper,而这里却有getMapper? 2,UserDao明明是我们定义的一个接口类,根本没有定义实现类,那这个userMapper是什么?是mybatis自动为我们生成的实现类吗? 为了更好的解释着两个问题,我们需要重新认识Configuration这个类. 但是在这之前,你需要了解一个概念(设计模式):JAVA设计模式-动态代理(Proxy)示例及说明

Java程序语言的后门-反射机制

在文章JAVA设计模式-动态代理(Proxy)示例及说明和JAVA设计模式-动态代理(Proxy)源码分析都提到了反射这个概念. // 通过反射机制,通知力宏做事情method.invoke(object, args);// 通过反射,将h作为参数,实例化代理类,返回代理类实例.return cons.newInstance(new Object[]{h});而且在 // 将接口类对象数组clone一份.final Class<?>[] intfs = interfaces.clone();也

Python爬虫_requests模块

什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的地位. 优点:自动处理url编码 自动处理post请求参数 简化cookie和代理操作 如何使用requests模块 安装: pip install requests 使用流程: 指定url   基于requests模块发起请求   获取响应对象中的数据值 持久化存储 请求载体身份标识的伪装: User-Agent:请求

代理(Proxy)及常见示例

Web代理是介于客户端与服务器之间,在各端点之间传送报文的中间人.它可以改善安全性,提高性能,节省费用. 1. 过滤与访问控制 在一些大公司中会对公司有害的内容设置过滤或禁止访问,或对某些服务器进行集中访问控制,都是通过代理实现的. 2. 安全防火墙 在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或流出一个组织,来提高安全性 3. Web缓存 代理缓存维护了常用文档的本地副本,并将他们按需提供,以减少缓慢且昂贵的因特网通信. 4. 反向代理 代理可以假扮服务器,这些被称为替代物(sur

设计模式之代理模式(Proxy)详解及代码示例

一.代理模式的定义 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介,代理模式也叫做委托模式. 二.为什么使用代理模式 中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口. 开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委

Net Core下通过Proxy 模式

Net Core下通过Proxy 模式 NET Core下的WCF客户端也是开源的,这次发布.NET Core 2.0,同时也发布了 WCF for .NET Core 2.0.0, 本文介绍在.NET Core下如何通过Proxy 消费WCF服务. 我们现在直接可以在 standard 2.0下调用wcf服务了,不过 Microsoft WCF Web Service Reference Provider 目前是beta阶段,要使用这个插件,需要安装一个Visual Studio插件,下载地址

java 动态代理示例,带主要注释

Java proxy是基于反射,仅仅支持基于接口的动态代理. java 动态代理是一切架构的基础,必须了解. 废话少说,先上代码获得感性认识. 示例代码有主要注释. 接口: public interface Subject { String hello(String name); void say();} 接口实现: public class ImpSubject implements Subject { @Override public String hello(String name){ r

构建施耐德楼控系统数据库后台服务器示例工程五(JAVA动态生成类)

在做数据库简易工具的过程中遇到了这么一个问题,即程序部署在tomcat下启动运行后,我们无法事先定义数据库中后续创建的表结构的Hibernate Bean对象,这样就需要我们在服务器运行起来后动态创建bean对象.cglib这个开源库即可解决我们的问题,动态创建JAVA对象. 1.cglib开源库简介 CGLIB(Code Generation Library)是一个开源项目,是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口. 反编译后CGLIB结构

设计模式之代理模式(Proxy)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以