首页 > 其他分享 >JDK动态代理

JDK动态代理

时间:2023-04-27 22:03:16浏览次数:37  
标签:personDao name JDK Object 代理 参数设置 动态 public targetObject


知识点

【 

public class JDKProxy implements InvocationHandler { 

 private Object targetObject;//代理的目标对象 

 public Object createProxyInstance(Object targetObject){ 

 this.targetObject = targetObject; 

/* 

* 第一个参数设置代码使用的类装载器,一般采用跟目标类相同的类装载器 

* 第二个参数设置代理类实现的接口 

* 第三个参数设置回调对象,当代理对象的方法被调用时,会委派给该参数指定对象的invoke方法 

*/ 

 return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), 

 this.targetObject.getClass().getInterfaces(), this); 

 } 

 public Object invoke(Object proxy, Method method, Object[] args) 

 throws Throwable { 

 return method.invoke(this.targetObject, args);//把方法调用委派给目标对象 

 } 

} 

当目标类实现了接口,我们可以使用jdk的Proxy来生成代理对象。 



】 


照样实现步骤: 


第一步:编写代理类 


public class JDKProxy implements InvocationHandler { 

 private Object targetObject;//代理的目标对象 

 public Object createProxyInstance(Object targetObject){ 

 this.targetObject = targetObject; 

/* 

* 第一个参数设置代码使用的类装载器,一般采用跟目标类相同的类装载器 

* 第二个参数设置代理类实现的接口 

* 第三个参数设置回调对象,当代理对象的方法被调用时,会委派给该参数指定对象的invoke方法 

*/ 

 return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), 

this.targetObject.getClass().getInterfaces(), this); 

 } 

public Object invoke(Object proxy, Method method, Object[] args) 

 throws Throwable { 

 return method.invoke(this.targetObject, args);//把方法调用委派给目标对象 

 } 

} 

当目标类实现了接口,我们可以使用jdk的Proxy来生成代理对象。 


第二步:编写PersonServer。java和接口IPersonServer.java 


public interface IPersonServer { 


 public abstract void save(); 


} 



public class PersonServer implements IPersonServer { 


private IPersonDao personDao; 

 private String name; 


 public PersonServer(){} 


 /* 

 * 通过构造器来注入依赖对象 

 */ 

 public PersonServer(IPersonDao personDao, String name) { 


 this.name = name; 

 this.personDao = personDao; 


 } 

 public PersonServer(String name){ 

 this.name=name; 

 } 


 public String getName() { 

 return name; 

 } 


 public void setName(String name) { 

 this.name = name; 

 } 


 public IPersonDao getPersonDao() { 

 return personDao; 

 } 


 // @Resource(name="mypersonDao") 

 // @Autowired 

 public void setPersonDao(IPersonDao personDao) { 

 this.personDao = personDao; 

 } 


 public void save() { 

 System.out.println("Test JDK Proxy"); 

 } 

} 


第三步:编写单元测试 


@Test 

public void TestJDKProxy() 

{ 

createJDKProxy proxy=new createJDKProxy(); 

//转换为实现接口 

IPersonServer personServer=(IPersonServer)proxy.createProxyInstance(new PersonServer("liyong")); 

personServer.save(); 

}

标签:personDao,name,JDK,Object,代理,参数设置,动态,public,targetObject
From: https://blog.51cto.com/u_16091571/6232147

相关文章

  • mybatis控制动态SQL拼接标签之foreach标签
    mybatis控制动态SQL拼接标签之foreach标签foreach标签主要用于构建in条件,可在sql中对集合进行迭代。也常用到批量删除、添加等操作中。这个标签在实际业务中非常常用,当然运维旧项目也会发现,有些坑,用java循环执行sql来表示批量插入。属性说明:collection:collection属性的值有三......
  • 线段树的动态开点模板
    学习自数据结构学习笔记(5)动态开点线段树动态开点线段树感谢大佬们博客的帮助//AConemoretimes#include<bits/stdc++.h>usingnamespacestd;#definefifirst#definesesecond#definepbpush_back#defineendl'\n'#defineall(x)(x).begin(),(x).end()......
  • 背包问题-动态规划
    概念背包问题是一类组合优化问题,抽象定义:有一系列的物品,每样都有重量和价值,选择一些物品使得总的重量不超过限制,总的价值尽可能大。背包是一种隐喻,即假设某人有固定容量的背包,怎样选择物品,使得物品的总价值最高。应用投资组合选择原料最优化切割Merkle–Hellman密钥的生......
  • 华为路由-动态路由RIP-详细过程
    R1interfaceg0/0/0ipaddress192.168.10.124                       第一步:先把R1、R2、R3、R4的端口IP设置好interfaceg0/0/1                                   第二部:使用rip 宣告自己的网段ipaddress192.......
  • 华为路由-动态路由OSPF area 多区域-详细过程
                  OSPFarea 多区域R1[r1]interfaceg0/0/0[r1-GigabitEthernet0/0/0]ipaddress192.168.10.224       interfaceg0/0/1                                   [r1-GigabitEthernet0/0/1]ip......
  • nginx 正则反向代理到k8s
    代码:nginx正则反向代理到k8s的服务:http{resolverkube-dns.kube-system.svc.cluster.local;server{listen80;#serviceslocation~/(\w+)/{ proxy_passhttp://$1.default.svc.cluster.local:8888;}}配置:  ......
  • Vue 根据父组件的不同动态显示子组件
    一、问题描述两个同级组件公用一个子组件,需要根据不同的组件,动态显示子组件的内容,比如A需要这么多的Radio,但是B不需要二、解决思路父组件向子组件传值,子组件根据传入的内容进行判断三、代码//父组件引入子组件通过自定义名称传入父组件的值<statusChange:isShowRadio=......
  • ASEMI代理ADI亚德诺ADM3051CRZ-REEL7车规级芯片
    编辑-ZADM3051CRZ-REEL7芯片参数:型号:ADM3051CRZ-REEL7显性状态:78mA隐性状态:10mA待命状态:275μACANH输出电压:4.5VCANL输出电压:2V差动输出电压:3V输入电压滞后:150mV差分输入电阻:100kΩ参考输出电压:3.025V最大数据速率:1MbpsVCC:−0.3Vto+7V工作温度范围:−40°C......
  • ASEMI代理ADI亚德诺ADM2582EBRWZ工业级隔离式收发器
    编辑-ZADM2582EBRWZ是ADI推出的一款带隔离的RS-485/RS-422收发器芯片,采用专利的iCoupler隔离技术,可以提供高达2.5kV的隔离电压,具有超高带宽和低功耗等优势,适用于工业自动化、仪器仪表、通信设备等领域。 一、iCoupler隔离技术 ADM2582EBRWZ采用了ADI专利的iCoupler隔离技术......
  • burp suite手动代理设置
    一直点击下一步就可以了接着我们打开Windows设置,设置代理:  一定要点击保存!......