代码如下:
package com.dance;
public interface Bankinterface { public void remit();
public void saving();
}
//被代理的bank类
package com.dance;public class Bank implements Bankinterface { public void remit() {
// TODO Auto-generated method stub
System.out.println("银行汇款操作");
} public void saving() {
// TODO Auto-generated method stub
System.out.println("银行存款操作");
}}
//日志管理类
package com.dance;public class LogBank { private String log;

public String getLog()
{
return log;
}

public void setLog(String log)
{
log = log;
}

public void writelog(String s)
{
this.setLog(s);
System.out.println(this.getLog());
}
}
//执行控制类
package com.dance;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class BankProxyHandler implements InvocationHandler { private Object target;
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
// TODO Auto-generated method stub
Object result = null;
LogBank lb = new LogBank();
//拦截remit 方法
if(arg1.getName().equals("remit"))
{
//调用日志拦截器
lb.writelog("拦截器开始汇款日志记录");
result = arg1.invoke(target, arg2);
//调用日志拦截器
lb.writelog("拦截器结束汇款日志记录");
}
else
{
System.out.println("调用了存钱模块");
result = arg1.invoke(target, arg2);
}
return null;
}

public void setTarget(Object target)
{
target = target;
}
}
//产生一个代理类
package com.dance;
import java.lang.reflect.Proxy;
public class BankProxyFactory { public static Object getProxy(Object obj)
{
BankProxyHandler bh = new BankProxyHandler();
bh.setTarget(obj);

return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), bh);
}
}
//测试类
package com.dance;public class TextRun { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义被代理的类
Bank bank = new Bank();
//生成一个代理类
Bankinterface bi = (Bankinterface)BankProxyFactory.getProxy(bank);

//执行代理类的方法
//汇款操作
bi.remit();
//存款操作
bi.saving();

}
}//异常代码如下:
Exception in thread "main" java.lang.NullPointerException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.dance.BankProxyHandler.invoke(BankProxyHandler.java:19)
at $Proxy0.remit(Unknown Source)
at com.dance.TextRun.main(TextRun.java:17)
null
 请知道的给指点一下,谢谢了