JDK动态代理
来源:互联网 发布:led灯 知乎 编辑:程序博客网 时间:2024/06/01 20:03
JDK动态代理的理论:
1.编写服务类和服务接口,这是真正的服务方法提供者,在JDK代理中接口是必须的
2.编写代理类,提供绑定和代理方法。现在我们写一个代理类,提供真实的对象绑定和代理方法。代理类的要求实现InvocationHandler接口的代理方法(invoke),当一个对象呗绑定后,执行其方法的时候就会进入到代理方法里。
JDK动态代理的原理:
1.JDK产生了一个代理对象,这个代理对象有三个参数:第一个参数target.getClass().getClassLoader()是类加载器,第二个参数target.getClass().getInterfaces()是接口,第三个参数this代表当前的HelloServiceProxy类,换句话说使用HelloServiceProxy的代理方法作为对象的代理执行者。
2.一旦绑定后,在进入代理对象方法的调用的时候会进入HelloServiceProxy的代理方法上,代理方法有三个参数:第一个参数proxy是代理对象,第二个参数当前调用的方法,第三个参数是方法的参数。比如说现在吧HelloServiceImpl对象(Obj)用bind方法绑定后,返回其占位,我们在调用Proxy.sayHello("张三"),那么它就会进入到HelloServiceProxy的invoke参数中第一个便是代理对象Proxy,方法便是SayHello,参数张三
服务接口代码:
public interface HelloService{
public void sayHello(String name);
}
服务类代码:
public Class HelloServiceImpl implements HelloService{
public void sayHello(String name){
Sysout(“Hello ”+name);
}
代理类代码(实现InVocationHandler的代理方法invoke):
public Class HelloServiceProxy implements InVocationHandler{
private Object target;
//绑定代理类方法
public Object bind(Object target){
this.target = target;
return Proxy.new ProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
}
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
Sysout("###########JDK动态代理#############")
Object result = null;
Sysout("我准备开始说hello");
result = method.invoke(target,args);
Sysout("我说过hello");
return result;
}
}
测试main方法代码:
public Class HelloServiceMain{
public static void main(String[] args){
//JDK动态代理实现调用接口方法
HelloServiceProxy hellHandler = new HelloServiceProxy();
HelloService proxy = (HelloService) helloHandler.bind(new HelloSerivceImpl());
proxy.sqyHello("李白");
//一般的调用服务类方法
Sysout("--------------------------------");
HelloServiceImple proxyImpl = new HelloSerivceImpl();
proxyImpl .sqyHello("李白");
}
}
输出结果:
###########JDK动态代理#############
我准备开始说hello
Hello 李白
我说过hello
--------------------------------------------------------------
Hello 李白
- 代理模式,JDK动态代理
- Java动态代理--jdk代理
- 代理模式-JDK动态代理
- JDK中的动态代理
- JDK动态代理
- JDK动态代理
- JDK动态代理
- jdk动态代理(暂)
- JDK动态代理
- JDK动态代理实例
- jdk 动态代理
- JDK动态代理
- JDK动态代理说明
- jdk动态代理
- JDKDynamicProxy JDK动态代理
- JDK动态代理实现
- JDK 动态代理
- JDK动态代理
- Vue.js 官方文档摘记:Vue 实例
- 关于SqlServer数据库中自增型ID的优势及不足的分析
- javaee加密部署项目通过tomcat使用自定义的classload解密
- opencv3之目标跟踪(单目标、多目标)
- jenkins的使用
- JDK动态代理
- 回归
- itemCF 基于物品的协同过滤
- 数据结构BinaryTree实例(七):二叉树转成双向链表
- Vue2.0实现懒加载
- openstack的RPC机制之AMQP协议
- Flashimg工具的使用
- JVM对类的处理
- storm伪集群环境搭建