动态代理_ProxyFactory

来源:互联网 发布:返利商城APP源码 编辑:程序博客网 时间:2024/05/19 18:15

Waiter:

package com.mango.demo3;public interface Waiter {public void serve();}

Manwaiter:

package com.mango.demo3;public class ManWaiter implements Waiter {public void serve() {System.out.println("服务中...");}}

BeforeAdvice:

package com.mango.demo3;public interface BeforeAdvice {public void before();}

AfterAdvice:

package com.mango.demo3;public interface AfterAdvice {public void after();}


ProxyFactory:

package com.mango.demo3;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxyFactory {private Object targetObject;//目标对象private BeforeAdvice beforeAdvice;//前置增强private AfterAdvice afterAdvice;//后置增强public Object createProxy() {InvocationHandler h = new InvocationHandler() {public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {if(beforeAdvice != null) {beforeAdvice.before();}Object result = method.invoke(targetObject, args);if(afterAdvice != null) {afterAdvice.after();}return result;}};Object result = Proxy.newProxyInstance(this.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), h);return result;}public Object getTargetObject() {return targetObject;}public void setTargetObject(Object targetObject) {this.targetObject = targetObject;}public BeforeAdvice getBeforeAdvice() {return beforeAdvice;}public void setBeforeAdvice(BeforeAdvice beforeAdvice) {this.beforeAdvice = beforeAdvice;}public AfterAdvice getAfterAdvice() {return afterAdvice;}public void setAfterAdvice(AfterAdvice afterAdvice) {this.afterAdvice = afterAdvice;}}


Demo3:

package com.mango.demo3;import org.junit.Test;public class Demo3 {@Testpublic void fun1() {ProxyFactory factory = new ProxyFactory();factory.setTargetObject(new ManWaiter());factory.setBeforeAdvice(new BeforeAdvice() {public void before() {System.out.println("你好");}});factory.setAfterAdvice(new AfterAdvice() {public void after() {System.out.println("Bay!");}});Waiter waiter = (Waiter) factory.createProxy();waiter.serve();}}


执行结果:


你好
服务中...
Bay!



原创粉丝点击