日期:2014-05-17 浏览次数:20745 次
/**
* 此处可以为接口也可以为抽象类
* @author ljn
*
*/
public interface IHelloSpeaker {
public abstract void hello();
}
/**
* 接口实现类日志功能 简单的打印一句话
* @author ljn
*
*/
public class HelloSpeaker implements IHelloSpeaker {
public void hello(){
System.out.println("............this is Log");
}
}
/**
* 代理类实现IHelloSpeaker接口,同时拥有实际对象的引用(private HelloSpeaker helloObj;//代理类内部引用真实类)
* 代理必须完成委托对象的动作,也可以添加自己的动作(doBefore,doAfter)。
*
* @author ljn
*
*/
public class HelloProxy implements IHelloSpeaker {
private HelloSpeaker helloObj;// 代理类内部引用委托类
public HelloProxy(HelloSpeaker helloSpeaker) {
this.helloObj = helloSpeaker;
}
private void doBefore() {
System.out.println("method doBefore invoke!");
}
private void doAfter() {
System.out.println("method doAfter invoke!");
}
@Override
public void hello() {
// TODO Auto-generated method stub
doBefore();// 其他业务逻辑
helloObj = new HelloSpeaker();
helloObj.hello();// 委托类具体的业务逻辑。
doAfter();// 其他业务逻辑
}
}
/**
*测试类
*/
public class Test {
public static void main(String[] args) {
//其中HelloProxy中helloObject为需要代理的对象,在其它地方如下来使用代理机制
IHelloSpeaker proxy = new HelloProxy(new HelloSpeaker());
proxy.hello();
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LogHandler implements InvocationHandler {
private Object delegate;
public Object bind(Object delegate) {
this.delegate = delegate;
return Proxy.newProxyInstance(
delegate.getClass().getClassLoader(),
delegate.getClass().getInterfaces(),