永发信息网

使用spring的动态代理功能时为什么必须指定

答案:1  悬赏:10  手机版
解决时间 2021-11-26 15:24
使用spring的动态代理功能时为什么必须指定
最佳答案
拦截某些类的话,会判断这个类是否实现了接口,如果实现了接口就会用jdk 动态代理来创建代理对象;如果没有这个类没有实现接口情况下,则用CGLIB来创建代理对象。
JDK动态代理:
public class JDKProxy implements InvocationHandler {
private Object targetObject;//代理的目标对象
public Object createProxyInstance(Object targetObject){
this.targetObject = targetObject;

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来生成代理对象。
使用CGLIB生成代理:
public class CGLIBProxy implements MethodInterceptor {
private Object targetObject;//代理的目标对象
public Object createProxyInstance(Object targetObject){
this.targetObject = targetObject;
Enhancer enhancer = new Enhancer();//该类用于生成代理对象
enhancer.setSuperclass(this.targetObject.getClass());//设置父类
enhancer.setCallback(this);//设置回调用对象为本身
return enhancer.create();
}
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
return methodProxy.invoke(this.targetObject, args);
}
}
CGLIB可以生成目标类的子类,并重写父类非final修饰符的方法。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
环氧树脂在粘贴碳钎维布起到的作用有哪些
德美亚车行汽车销售有限公司地址在什么地方,
正和路太平路在太仓哪
你好,请问12✘95有几种简便计算方法
你看上去很伤心英文怎么说?两种方式
学散打之前要训练些什么
大家参考下这个七个月的肚型是男是女
情人从爱到依赖为什么
2016年2月15日佛山今日煤气价格查询
卡罗拉的后备箱用内置拉杆打不开,请问这是出
高考500分左右的大学有什么?
注册公司能在住宅么
宁夏银川居住60天什么时候住气候最好
什么是大众营销?
从华坞坐几路公交可以到临平野钓点?
推荐资讯
数码印花,浅灰色的色值,潘通色卡,色号:16
请问倪钰莹我爱你用韩语怎么说啊?
什么叫房屋出典呢???
想和老师搞怎么办
玩寻仙为什么延迟这么高
找到瓶洋酒 上面写着 duke xo 背面是brandy d
董事会成员已签字股东未签字合同成立吗?
摇滚用英文怎么说
200x100x100的多孔砖一立方多少个
急需2000元,哪个借钱软件18周岁就能借到钱呀
作者用什么表现手法引出济南冬天温睛的特点?
诚信二手车收购有限公司地址在什么地方,想过
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?