最近涉及到动态代理,所以就写了一个例子。
1.Subject.java
package javatest.proxy;
public interface Subject {
abstract public void method1();
abstract public void method2();
}
2.RealSubject.java
package javatest.proxy;
public class RealSubject implements Subject {
public RealSubject() {}
@Override
public void method1() {
// TODO Auto-generated method stub
System.out.println(" From real method1. ");
}
@Override
public void method2() {
// TODO Auto-generated method stub
System.out.println(" From real method2. ");
}
}
3.DynamicSubject.java
package javatest.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DynamicSubject implements InvocationHandler {
private Object sub;
public DynamicSubject() {}
public DynamicSubject(Object obj) {
sub = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println( " before calling " + method);
method.invoke(sub,args);
System.out.println( " after calling " + method);
return null ;
}
}
4.Client.java
package javatest.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
RealSubject rs = new RealSubject(); //real Object
InvocationHandler handler = new DynamicSubject(rs);
Class cl = rs.getClass();
Subject sub = (Subject) Proxy.newProxyInstance(cl.getClassLoader(), cl.getInterfaces(), handler);
sub.method1();
sub.method2();
}
}
5.运行结果