每日一个技术点之动态代理
家电修理 2023-07-16 19:17www.caominkang.com电器维修
cglib和jdk 动态代理的区别?
- cglib 用的是asm字节码框架,而jdk用的是反射机制,这就导致了cglib创建对象慢但执行速度快 jdk创建对象快,但执行相对较慢
- 经过反编译发现jdk 动态代理是创建了一个继承了Proxy类的代理类并实现了接口,($class0 extends Proxy implements interfaceA )其中class0中聚合了很多接口中的方法,通过method.invoke反射机制实现调用。
- cglib 动态代理无需依赖接口,而需要依赖cglib库,jdk则需要依赖接口,并且不依赖库即可实现。
用途一般对于eb应用来说,jdk动态代理用途较广,针对没有目标接口的要代理的类则可以选择cglib动态代理
------------------------------- 2022.8.17--------------------------------------------------------------------------
如何使用?(以jdk 动态代理为例)jdk动态代理强依赖于接口,所以我们需要创建一个接口
public interface MyActionInterface { void myAction(String username); }
接口都是要实现的,之后创建一个实现类
public class MyActionImpl implements MyActionInterface{ @Override public void myAction(String username) { System.out.println("action = " + username); } }
最关键的一步来了,创建proxy代理handler
public class MyProxy implements InvocationHandler{ private Object target; public MyProxy(Object target) { this.target = target; } public MyProxy(Class> targetClass) { try { this.target = targetClass.neInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Object neObject() { if (target == null) { thro ne RuntimeException("代理对象为空"); } return Proxy.neProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) thros Throable { // TODO Auto-generated method stub //预处理 Object result = method.invoke(target, args); //处理结果 return result; } }
调用
public class ProxyTest { public static void main(String[] args) { //注意返回的代理对象为接口对象,需要用接口对象作为返回类型 MyActionInterface impl = (MyActionInterface)ne MyProxy(MyActionImpl.class) .neObject(); impl.myAction("zyg"); } }原理?源码?
https://baijiahao.baidu./s?id=1678997916718732701&fr=spider&for=pc
上一篇:ps更改字体大小技巧分享
下一篇:Win7网页超链接打不开怎么办?点击超链接不会加
空调维修
- 温岭冰箱全国统一服务热线-全国统一人工【7X2
- 荆州速热热水器维修(荆州热水器维修)
- 昆山热水器故障码5ER-昆山热水器故障码26
- 温岭洗衣机24小时服务电话—(7X24小时)登记报
- 统帅热水器售后维修服务电话—— (7X24小时)登
- 阳江中央空调统一电话热线-阳江空调官方售后电
- 乌鲁木齐阳春燃气灶厂家服务热线
- 珠海许昌集成灶售后服务电话-全国统一人工【
- 乌鲁木齐中央空调维修服务专线-乌鲁木齐中央空
- 新沂热水器故障电话码维修-新沂热水器常见故障
- 诸城壁挂炉24小时服务热线电话
- 靖江空调24小时服务电话-——售后维修中心电话
- 空调室外滴水管维修(空调室外排水管维修)
- 九江壁挂炉400全国服务电话-(7X24小时)登记报修
- 热水器故障码f.22怎么解决-热水器f0故障解决方法
- 营口热水器售后维修服务电话—— 全国统一人工