- 浏览: 1339784 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (4)
- Struts1 (16)
- Spring (9)
- Hibernate (5)
- AJAX (16)
- MS Server (9)
- Oracle (35)
- 测试技术 (5)
- 其他 (37)
- JSF (1)
- EJB (5)
- ASP.NET (9)
- iBATIS (5)
- Struts Spring Hibernate (2)
- HTML (12)
- Eclipse使用 (5)
- 设计模式 (5)
- JSP (32)
- 正则表达式 (2)
- 服务器 (12)
- Java基础 (48)
- MySQL (4)
- 面试 (22)
- UML (1)
- 数据结构 (3)
- Ant (2)
- 规范 (4)
- JavaScript (29)
- 软件使用及技巧 (25)
- PHP (1)
- DWR (3)
- FreeMarker (1)
- ExtJs (17)
- JFreeChart (9)
- Reports (2)
- JavaException (1)
- Java Mail (1)
- Flex (9)
- 异常 (12)
- Log4j (2)
- WebService (1)
- jQuery (1)
- Sybase (2)
- myeclipse_plugin (2)
- Linux (5)
- jbpm (2)
- SCM (1)
- mongoDB (1)
最新评论
-
lihua2008love:
<typeAlias alias="User& ...
IBATIS简单操作 -
lihua2008love:
...
关于项目框架设计的一点学习 -
c_jinglin:
我使用<OBJECT CLASSID="cls ...
这就是个静态页面通过js控制mscomm对某com设备进行访问的例子. -
zlbjava:
赞,用了还不错
java获取请求的ip地址,并解析ip所属地区 -
完美天龙:
cs842813290 写道楼主,我明白的地方:在链表已有N个 ...
JAVA实现双向链表
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式一般涉及到的角色有
抽象角色:声明真实对象和代理对象的共同接口
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装
真实角色:代理角色所代表的真实对象,是我们最终要引用的对象
动态代理中最关键的两点是:
InvocationHandler 接口的实现
Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)的方法的调用
一、原理示例
java 代码
- /*
- * 创建日期 2007-3-13
- *
- * TODO 要更改此生成的文件的模板,请转至
- * 窗口 - 首选项 - Java - 代码样式 - 代码模板
- */
- package com.langsin.proxy;
- // 抽象角色
- abstract public class Subject
- {
- abstract public void request();
- }
java 代码
- package com.langsin.proxy;
- //真实角色:实现了Subject的request()方法
- public class RealSubject extends Subject
- {
- public RealSubject()
- {
- }
- public void request()
- {
- System.out.println("From real subject.");
- }
- }
java 代码
- package com.langsin.proxy;
- //代理角色
- public class ProxySubject extends Subject
- {
- private RealSubject realSubject; // 以真实角色作为代理角色的属性
- public ProxySubject()
- {
- }
- public void request() // 该方法封装了真实对象的request方法
- {
- preRequest();
- if (realSubject == null)
- {
- realSubject = new RealSubject();
- }
- realSubject.request(); // 此处执行真实对象的request方法
- postRequest();
- }
- private void preRequest()
- {
- // something you want to do before requesting
- }
- private void postRequest()
- {
- // something you want to do after requesting
- }
- }
java 代码
- package com.langsin.proxy;
- //客户端调用
- public class Client
- {
- public static void main(String[] args)
- {
- Subject sub = new ProxySubject();
- sub.request();
- }
- }
二、应用示例一、
java 代码
- package com.langsin.dynamicproxy;
- //抽象角色(之前是抽象类,此处应改为接口):
- public interface Subject
- {
- abstract public void request();
- }
java 代码
- package com.langsin.dynamicproxy;
- //具体角色
- public class RealSubject implements Subject
- {
- public RealSubject()
- {
- }
- public void request()
- {
- System.out.println("From real subject.");
- }
- }
java 代码
- package com.langsin.dynamicproxy;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- import java.util.List;
- import java.util.Vector;
- public class VectorProxy implements InvocationHandler
- {
- private Object proxyobj;
- public VectorProxy(Object obj)
- {
- proxyobj = obj;
- }
- public static Object factory(Object obj)
- {
- Class cls = obj.getClass();
- return Proxy.newProxyInstance(cls.getClassLoader(),
- cls.getInterfaces(), new VectorProxy(obj));
- }
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable
- {
- System.out.println("before calling " + method);
- if (args != null)
- {
- for (int i = 0; i < args.length; i++)
- {
- System.out.println(args[i] + "");
- }
- }
- Object object = method.invoke(proxyobj, args);
- System.out.println("after calling " + method);
- return object;
- }
- @SuppressWarnings("unchecked")
- public static void main(String[] args)
- {
- List v = (List) factory(new Vector(10));
- v.add("New");
- v.add("York");
- System.out.println(v);
- v.remove(0);
- System.out.println(v);
- }
- }
应用代码二、
java 代码
- package com.langsin.dynamicproxy;
- public interface Foo
- {
- void doAction();
- }
java 代码
- package com.langsin.dynamicproxy;
- public class FooImpl implements Foo
- {
- public FooImpl()
- {
- }
- public void doAction()
- {
- System.out.println("in FooImp1.doAction()");
- }
- }
java 代码
- package com.langsin.dynamicproxy;
- public class FooImpl2 implements Foo
- {
- public FooImpl2()
- {
- }
- public void doAction()
- {
- System.out.println("in FooImp2.doAction()");
- }
- }
java 代码
- package com.langsin.dynamicproxy;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- public class CommonInvocationHandler implements InvocationHandler
- {
- // 动态执行对象,需要回调的对象
- private Object target;
- // 支持构造子注射
- public CommonInvocationHandler()
- {
- }
- // 支持构造子注射
- public CommonInvocationHandler(Object target)
- {
- setTarget(target);
- }
- /**
- *
- * 采用setter方法注射
- *
- * @param target
- *
- */
- public void setTarget(Object target)
- {
- this.target = target;
- }
- /**
- *
- * 调用proxy中指定的方法method,并传入参数列表args
- *
- * @param proxy
- * 代理类的类型,例如定义对应method的代理接口
- *
- * @param method
- * 被代理的方法
- *
- * @param args
- * 调用被代理方法的参数
- *
- * @return
- *
- * @throws java.lang.Throwable
- *
- */
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
- {
- return method.invoke(target, args);
- }
- }
java 代码
- package com.langsin.dynamicproxy;
- import java.lang.reflect.Proxy;
- public class Demo
- {
- public static void main(String[] args)
- {
- // 1.通用的动态代理实现
- CommonInvocationHandler handler = new CommonInvocationHandler();
- Foo f;
- // 2.接口实现1
- handler.setTarget(new FooImpl());
- // 方法参数说明:代理类、代理类实现的接口列表、代理类的处理器
- // 关联代理类、代理类中接口方法、处理器,当代理类中接口方法被调用时,会自动分发到处理器的invoke方法
- // 如果代理类没有实现指定接口列表,会抛出非法参数异常
- f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
- new Class[] { Foo.class },
- handler);
- f.doAction();
- // 3.接口实现2
- handler.setTarget(new FooImpl2());
- f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
- new Class[] { Foo.class },
- handler);
- f.doAction();
- }
- }
发表评论
-
项目中用到的数字证书的创建,签名实现
2012-07-15 20:17 2180首先 需要下载jar包 bcprov-jdk15-145.ja ... -
DecimalFormat的用法介绍
2012-02-06 14:16 2445import java.text.*; import ... -
tomcat,jdk,maven环境变量配置(备忘)
2011-12-25 10:24 1368环境变量: CATALINA_HOME D:\P ... -
java获得指定时间几天前或几天后的日期
2010-01-14 09:28 8822/** * 得到几天前的时间 * * ... -
动态读取配置文件
2009-08-04 11:30 2480import java.io.File; import ja ... -
JAVA对数字证书的常用操作
2009-07-12 18:42 1426一需要包含的包 import java.security.* ... -
签字证书例子
2009-07-12 18:31 1610import java.io.FileInputStr ... -
list,set,map,数组间的相互转换
2009-07-01 16:10 28581.list转set Set set = new HashSe ... -
动态运行Java代码
2009-07-01 14:08 1415有些情况下,我们不得不动态运行Java代码,以便提供更加灵活的 ... -
防止java反编译的一些常用方法
2009-02-12 14:33 20951.隔离Java程序 最 ... -
操作数组
2009-01-20 12:48 1245List list1 = new ArrayList() ... -
java写入文件时庄和薛字的问题
2008-12-26 10:47 1485今天碰到一个很有意思的问题,当写入文件是庄或薛的时候,就会出现 ... -
Hessian的学习笔记
2008-12-01 12:20 12281- 整个jar很小,200多K,3.1版本的,当然,我下载的 ... -
编写一个Java程序,对指定文本进行数字签名(文本随意)
2008-10-08 14:12 2849一:需要包含的包 import java.security. ... -
java的property配置文件的用法
2008-07-29 16:26 1745package configuration; ... -
统一异常处理
2008-07-16 16:47 1957package com.bjsxt.oa.manager; ... -
java.lang.reflect.Array的应用
2008-07-02 23:11 1868java.lang.Array 类提供了动态创建和访问数组元 ... -
Java语言的反射机制
2008-07-02 23:10 1658在JAVA运行环境中,对 ... -
@Documented Annotation的使用
2008-07-02 23:09 2465@Documented Annotation的使用: @Do ... -
有关Annotation的继承
2008-07-02 23:09 4034有关Annotation的继承说明: 1、JDK文档中的说明是 ...
相关推荐
JAVA的反射机制与动态代理
主要讲述Java反射机制与设计模式之一:代理模式的原理与应用;同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践。
利用Java的反射与代理实现IOC模式 在Java中,其反射和动态代理机制极其强大,我们可以通过其反 射机制在运行时获取信息。...在本文中,主要讲述的是用Java的反射机制实现IOC。下 面,让我们开始IOC之旅吧!
JAVA反射机制与动态代理综合里面自带了23个类的例子,用代码详细地解说了JAVA反射机制与动态代理原理,此资料对走java这条线的朋友有极大的帮助....
几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变...可以学习Java的动态代理模式、学习Java工厂模式以及如何将工厂模式与属性文件相结合。
reflection是一系列的API,用于表示或者处理当前JVM中的类,接口和对象. java.lang.reflect/java.lang.Class 在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
介绍JAVA反射机制,及代理模式,展示相应示例.
1简单反射机制实例 2各各方法以及类的应用实例 3代理模式 内有详细讲解说明保证大家理解并会应用反射
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 我的代码里主要有一下知识点: 1.获取Class对象的三种方式 2.获取构造方法并调用 3.获取成员方法 4.获取成员变量 5.反射数组 6.通过反射...
1、到底什么叫反射 2、Class类的作用 3、Class类的实例化三种...Class类在一般的基本开发是不会有任何作用的,完全可以不会,但是,对于一些高端的开发框架,所有的基本的核心原理都在于反射机制的应用上。 8、代理模式
利用java中的反射机制和代理机制,实现IOC模式,有详细的代码和实例
java 模式 设计 代理模式 ,动态代理跟反射机制的内容相关
主要讲述Java反射机制与设计模式之一:代理模式的原理与应用同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践 本课程要求大家对Java泛型知识有所了解,因为程序代码中大量使用了泛型相关...
Java反射机制是一个非常强大的功能,在很多大型项目比如Spring, Mybatis都可以看见反射的身影。通过反射机制我们可以在运行期间获取对象的类型信息,利用这一特性我们可以实现工厂模式和代理模式等设计模式,...
* 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * * 作用 * 1.保护被代理对象 * 2.增强被代理对象 * 3.完全...
Java 反射机制 反射机制简介 反射机制应用示例 简单的Ioc实现 代理模式 Java动态代理 简单的Aop实现 “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl...
详细讲解Java的反射机制,包括Reflection API、在远程方法调用中运用反射机制、代理模式,后面还有一些练习和答案
在代理模式中,主要有两种类型:静态代理和动态代理。 1.静态代理: 静态代理是指在编译期间就已经确定代理类和被代理类的关系,需要手动编写代理类。代理类需要实现与被代理类相同的接口,并且在代理类中持有一个被...
本课程主要讲述Java反射机制与设计模式之一:代理模式的原理与应用 同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践 本课程要求大家对Java泛型知识有所了解,因为程序代码中大量使用了泛型...
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。...