JDK动态代理的实践
来源:互联网 发布:俄罗斯域名后缀 编辑:程序博客网 时间:2024/06/01 08:37
动态代理在各大框架中用的十分的频繁,
本文主要介绍通过JDK来实现动态代理的机制。
对代理不理解?
可以参看我的设计模式这一篇:代理模式-让替身帮你区干事
我们需要完成下面几个步骤:
1、编写服务类和接口,这个是真正的服务提供商,在JDK代理中,接口是必须的。
2、编写代理类,提供绑定和代理方法。
具体代码:
首先一个接口类HelloService类:
package study.JDKProxy;public interface HelloService {public void sayHello(String name);}
再一个具体实现类HelloServiceImpl类:
package study.JDKProxy;public class HelloServiceImpl implements HelloService{public void sayHello(String name) {System.out.println("Hello" + name);}}
接下来就是一个代理类HelloServiceProxy类:
package study.JDKProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.net.BindException;/** * 一个代理类,提供真实对象的绑定和代理方法,代理 * 类的要求是实现invocationhandler接口的代理方法 * 当一个对象被绑定后,执行器方法就会进去到代理方法里面 * @author anla7856 * */public class HelloServiceProxy implements InvocationHandler{/** * 真实服务对象 */private Object target;/** * 绑定委托对象并返回一个代理类 * @param target * @return */public Object bind(Object target) {this.target = target;//取得代理对象,jdk代理需要提供接口。return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);}/** * @param proxy 代理对象唉嗯 * @param method 被调用方法 * @param args 方法的参数 */public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("这是jdk动态代理");Object result = null;//反射方法调用前result = method.invoke(target, args);//反射方法调用后return result;}}
运行测试方法:
@Testpublic void test() {HelloServiceProxy helloHandler = new HelloServiceProxy();HelloService proxy = (HelloService) helloHandler.bind(new HelloServiceImpl());proxy.sayHello("Tom");}
即可看见通过代理后,然后绑定执行HelloServiceImpl的方法。
赠人玫瑰,手留余香~~
阅读全文
0 0
- JDK动态代理的实践
- 模仿JDK动态代理的简单实践
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- Jdk的动态代理
- JDK和CGLIB动态代理实践
- JDK的动态代理机制
- JDK的动态代理机制
- JDK的动态代理原理
- JDK的动态代理机制
- JDK的动态代理机制
- JDK的动态代理机制
- jdk动态代理的实现
- JDK的动态代理机制
- Aop的jdk动态代理
- Cocos Creator Animation
- java枚举enum
- 【C语言】【unix c】计算机语言的发展史
- 常用的前端开发工具
- zigbee 协议栈 SamPle App工程(转自天运科技)第十五讲 SerialApp工程
- JDK动态代理的实践
- iOS 一一 AutoLayout之Masonry实现
- QAction setIcon,菜单和工具栏不显示图标的问题解决
- django基本命令
- NestedScrollView的使用
- ViewPager之onPageScrolled的动画
- 【大数据部落】文本挖掘:twitter推特LDA主题情感分析
- 单向链表
- 绑定机制(转自天运科技)