java动态代理
动态代理是指客户通过代理类来调用其它对象的方法
动态代理使用场合:
•
远程方法调用(RMI)
•
1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法
2.创建被代理的类以及接口
3.通过Proxy的静态方法
newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 创建一个代理
4.通过代理调用方法
参见程序VectorProxy.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<String> v = (List<String>) factory(new Vector<String>(10));
v.add("New");
v.add("York");
System.out.println(v);
v.remove(0);
System.out.println(v);
}
}
参见程序Foo.java
参见程序FooImpl.java
参见程序FooImpl2.java
参见程序CommonInvocationHandler.java
参见程序Demo.java
package com.langsin.dynamicproxy;
public interface Foo
{
void doAction();
}
package com.langsin.dynamicproxy;
public class FooImpl implements Foo
{
public FooImpl()
{
}
public void doAction()
{
System.out.println("in FooImp1.doActio
相关文档:
import java.util.*;
public class stack
{
private List list=new ArrayList();
private int index=0;
public void push(Object obj)
& ......
//输入某年某月某天,输出这一天是这一年的第几天
public class DaySum {
public static void main(String[] args)
{
date da=new date();
System.out.println(da.count(2008,12,31));
}
}
class date
{
int count(int year,int month,int day) ......
浅析Java web程序之客户端和服务器端交互原理
近来一直在思考一个疑问,为什么在用struts框架开发的时候FormBean都须要序列化,即实现Java.io.Serializable接口,本着勤学好问的精神我Google了下对象序列化方面的文章,虽然大体明白了如何做,但是还是没有搞清楚为什么要这样做;结尾我想处理一个疑问要找疑问的根源和本质 ......
作为一个Java程序员,我们常常会颇感自豪地说:金融行业的大系统一般都是用Java写的。有太多理由让我们相信,Java在企业级应用这块,起着举足轻重的作用。然而,事实果真如此吗?金融行业或许是那样,可是像Google、Amazon这样的大型网站呢?面对这样的疑问,在分布式应用、CORBA、JINI、J2EE、网格和SOA领域,有着10多年经 ......