每日一个技术点之动态代理
家电修理 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网页超链接打不开怎么办?点击超链接不会加
空调维修
- 我的世界电脑版运行身份怎么弄出来(我的世界
- 空调抽湿是什么意思,设置抽湿的温度有什么意
- 方太燃气灶有一个打不着火 怎么修复与排查方法
- 夏季免费清洗汽车空调的宣传口号
- 清洗完空调后出现漏水现象
- iphone6能玩什么游戏(iphone6游戏)
- 如何设置电脑密码锁屏(如何设置电脑密码锁屏
- win10删除开机密码提示不符合密码策略要求
- 电脑w7显示不是正版(w7不是正版怎么解决)
- 万家乐z8热水器显示e7解决 怎么修复与排查方法
- 1匹空调多少瓦数(1匹空调多少瓦)
- 安卓手机连接电脑用什么软件好(关于安卓手机
- 电脑网页看视频卡是什么原因(爱拍看视频卡)
- 华帝燃气灶点火器一直响然后熄火怎么办:问题
- 电脑壁纸怎么换(关于电脑壁纸怎么换的介绍)
- 冬天空调的出风口应该朝什么方向(冬天空调风