ProxyFactory

来源:互联网 发布:js防水涂料2mm厚 编辑:程序博客网 时间:2024/06/05 20:11
package reflect;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import static java.lang.System.out;interface Action // 目标类的实现的接口{void say();void cry();void smile();}interface Advice{   // 在代理执行目标方法之前的建议接口void beforeMethod();void afterMethod();}class MyAdvice implements Advice // 实现建议的类{@Overridepublic void afterMethod() {out.println("method start");}@Overridepublic void beforeMethod() {out.println("method after");}}public class ProxyFactory {public  Object target  = null;public Object bind(final Object target,final Advice advice) { // 得到一个代理,并且在执行目标方法之前执行建议this.target = target;return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),new InvocationHandler(){@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {Object result = null;advice.beforeMethod(); // 在执行目标方法之前执行建议 result = method.invoke(target, args);advice.afterMethod();// 之后 的建议return result;}});}public static void main(String args[]) {Object target = new Action() {@Overridepublic void cry() {out.println("I'm crying...");}@Overridepublic void say() {out.println("I'm saying...");}@Overridepublic void smile() {out.println("I'm smiling...");}};Advice myadvice = new MyAdvice();Action proxy = (Action)new ProxyFactory().bind(target, myadvice);proxy.cry();}}

原创粉丝点击