package com.pattern.dhsjpattern.bs;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 实现动态代理相关的类与接口:
* Proxy:这个事java代理类的主类
* InvocationHandler:
* @author 00922993
*
*/
public class DynamicProxyPattern {
public static void main(String[] args) {
Proxy dynamicProxy = new Proxy();
Send send = (Send) dynamicProxy.bindObject(new Sender());
send.sendFlower();
}
}
class Proxy implements InvocationHandler{
private Object obj;
public Object bindObject(Object obj){
this.obj = obj;
return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("前置通知");
Object result = null;
try {
result = method.invoke(obj, args);
} catch (Exception e) {
System.out.println("例外通知");
e.printStackTrace();
}
System.out.println("后知通知");
return result;
}
}
interface Send{
public void sendFlower();
}
class Sender implements Send{
@Override
public void sendFlower() {
System.out.println("送花了");
}
}