spring动态代理有什么作用

spring动态代理有什么作用,在BO其中的一个方法前面或后面后执行一个方法,这个能做什么... spring动态代理有什么作用,在BO其中的一个方法前面或后面后执行一个方法,这个能做什么 展开
 我来答
baoer1127
2012-09-21 · TA获得超过926个赞
知道小有建树答主
回答量:939
采纳率:71%
帮助的人:332万
展开全部
主要就是解耦和。还有提高开发效率。易于修改啊。
你就想吧。一段记录日志的代码。loger.log("some mothed invoke at "+new Date()); 没有什么难事。但是你所有方法。你都复制一下?那个太不靠谱了。
嗯。这个就是Java 模式 中的 代理模式。你可以看一下。看看那个。你就知道了spring 的代理。嗯。spring的代理,有两种机制,一中是jdk的Proxy 还有一个是cglib 这个是基于集成实现的。嗯。就是super 使用重写方法。然后在重写方法中加入 super.thisMethod();
耦合度太高的话就会对你的程序未来升级带来恨大的麻烦。嗯。说实话啊。嗯。你的项目要是一顶保证永不改变。那么完全可以不管这个耦合度的问题。但是,jdk的升级。还有其他框架啊。技术的升级。都会对你 的系统带来问题。和升级空间。所以,降低耦合度就是一直在做的。嗯。呵呵。写了这么多。
Storm代理
2023-05-09 广告
StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、账密提取,IP+端口提取形式,不限... 点击进入详情页
本回答由Storm代理提供
fcangle
2012-09-20 · TA获得超过203个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:102万
展开全部
可以在你执行被代理对象里面的某个method前后自动执行任意你规定的代码,而不影响method其他相邻方法的执行,使代码程序低耦合。
也可以写一个不依赖与其他模块的日志管理模块,然后用AOP来把这个模块跟数据库操作模块挂钩,在数据操作的同时也通过AOP功能自动的记录了数据库操作日志。 当不需要日志时,可直接移除而不影响其他的代码。
追问
耦合度高了会出什么问题
追答
低耦合可以使你的程序模块间依赖性降低,比如当你的程序要做修改,比如增加删除或修改一个模块的时候,可以减少对原代码的修改量,低耦合可以让你对相关模块只做少量修改就ok。不知道我说清楚了么~~~
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
精品DIY生活
推荐于2017-09-26 · 知道合伙人数码行家
精品DIY生活
知道合伙人数码行家
采纳数:46447 获赞数:131769
视频剪辑、网络管理、图片处理、办公自动化、文学、语言学。

向TA提问 私信TA
展开全部
拦截某些类的话,会判断这个类是否实现了接口,如果实现了接口就会用jdk 动态代理来创建代理对象;如果没有这个类没有实现接口情况下,则用CGLIB来创建代理对象。
JDK动态代理:
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来生成代理对象。
使用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修饰符的方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guaishang
2012-09-20 · TA获得超过126个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:89万
展开全部
所谓代理,从字面上就可以看出来,是代为处理的意思。帮你要做的事情,并且可以在你要做的事情前后做一些事情。比如它可以帮你在做每件事时记下日志,也比如它可以帮你在做数据库数据增删改时,帮你提交数据,出错后帮你做回滚等等诸如此类的事情。spring动态代理很好用哦
更多追问追答
追问
用动态代理来开启事务关闭事务?开启数据库关闭数据库?
追答
能做到啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晏子530
2012-09-25 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:95.4万
展开全部
作用大了,你要问具体点还差不多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式