动态代理_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!
阅读全文
0 0
- 动态代理_ProxyFactory
- 代理-->静态代理&动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- LA4080 Warfare And Logistics (dijkstra+最短路树)
- c++考试总结
- CCF CSP 权限查询 JAVA 201612-3
- JS获取URL中参数值(QueryString)的4种方法分享
- David Silver强化学习课程笔记(六)
- 动态代理_ProxyFactory
- [leetcode] 532. K-diff Pairs in an Array
- springboot初步学习....初学者应该掌握的注解...
- 创建一个 Dynamic Web Project
- Windows Server2016安装Dynamics 365报InstallWindowsSearchAction操作失败的解决方法
- HDU-1503 Advanced Fruits(LCS)
- ESP8266学习经历之开发环境搭建
- matlab读取多个excel某列数据
- 1032. 挖掘机技术哪家强(20)