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
相关文档:
Lombok是一个开源项目,可以用来消除Java代码的冗长
详细介绍参看http://www.ibm.com/developerworks/opensource/library/os-lombok/index.html
下面介绍Lombok如何消除Java代码的冗长。
1. 首先去http://projectlombok.org/. 下载lombok.jar 包
2. & ......
JAVA对象转换为XML格式
简单的颤述下如何将JAVA对象转换为XML格式,详细了解请进入http://xstream.codehaus.org/tutorial.html
JAVABEAN对象
userInfo.java
private String name;
& ......
public class chengfa {
public static void main(String[] args)
{
model md=new model();
md.method();
}
}
class model
{
public int count=0;
public int[]b=new int[100];
public void me ......
浅析Java web程序之客户端和服务器端交互原理
近来一直在思考一个疑问,为什么在用struts框架开发的时候FormBean都须要序列化,即实现Java.io.Serializable接口,本着勤学好问的精神我Google了下对象序列化方面的文章,虽然大体明白了如何做,但是还是没有搞清楚为什么要这样做;结尾我想处理一个疑问要找疑问的根源和本质 ......
目录
摘要 ……………………………………………………………………2
文献综述 ……………………&h ......