动态代理的作用和aop的作用?

网上看了好多博客,都说是在代理的方法前后执行一个逻辑,那aop也能实现,为什么还要用到动态代理,这个不明白了。。。

2个回答

我理解:
1. 动态代理是一种设计模式,用于增强代理对象的功能的一种设计方式。更严格的来说代理包括静态代理和动态代理,只不过动态代理对于代码没有侵入性,技术实现难度大了些,所以大家谈的相对较多。
2. AOP这是spring提出的用于增强spring bean中方法功能的设计思路和具体实现。AOP思路和动态代理很像,AOP的原则是一切皆可代理,口气比动态代理大多了。
AOP的具体实现比如cglib,javasist,cglib应该算是AOP实现的集大成者,这框架的能力强到爆炸,你可以随心所欲操作字节码。比如曾经使用spring AOP魔改jdk的代码。

至于作用就是这些,一般来说使用AOP可以解决我们日常工作中:
1. 拦截
2. 在不能动原有代码基础上动他的代码
3. 为了对上层服务透明,一般也都是AOP

最后举几个每天都在用的AOP例子:
1. 数据库事务操作
对于事务操作,只能是start transaction; ....; commit;/rollback;你以为加个注解或者加个配置就能完成那么复杂的事务,这都是AOP拦截对象,做了增强
2. 监控
SOA架构下监控是必不可少的,这种监控怎么搞。总不能每一个接口都加上一条监控?所以都是AOP拦截统计获得
3. spring有一个重试框架
这个框架允许你对一个方法配置重试次数,重试时间等等,这也都是AOP的作用

caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复qq_14811757: 赞一个
11 个月之前 回复
qq_14811757
帅气十足的安哥 谢谢大佬的指导。。
11 个月之前 回复

动态代理是AOP实现的一个方式,AOP除了动态代理以外,还可以用代码织入。不同的语言,不同的场景,用的手段不同,仅此而已。
动态代理除了AOP之外,也可以就是单纯地实现一个代理(比如说适配不同的接口)

qq_14811757
帅气十足的安哥 谢谢大佬的指导。。
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请教下动态代理的作用
我想问下JDK的动态代理往往在哪些情况下会用到,使用动态代理的主要目的是干什么,仅仅是在调用目标类之前做一个拦截吗,请高手们指点下。
Java 动态代理作用是什么?
首先你要明白静态代理的作用我们有一个字体提供类,有多种实现(从磁盘,从网络,从系统) public interface FontProvider { Font getFont(String name); } public abstract class ProviderFactory { public static FontProvider getFontProvider() {
Java 动态代理作用是什么
作者:Intopass链接:https://www.zhihu.com/question/20794107/answer/75164285来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ① 首先你要明白静态代理的作用我们有一个字体提供类,有多种实现(从磁盘,从网络,从系统)public interface FontProvider {    Font getFo...
AOP的作用的实例
本文章简单的介绍了有关AOP在日记,事务管理的应用
AOP的作用(简)
AOP只是一种编程范式,用于提供从另一角度来考虑程序结构以完善面向对象编程。 主要优点有: 1、降低模块之间的耦合度。 2、使系统容易扩展。 3、更好的代码复用。 4、使代码有更好的可读性和易于维护。
Sprng IOC & AOP 的作用
8) rnrn希望能得到解答
AOP简介与作用
AOPAspect Oriented Programming(AOP)是较为热门的一个话题。AOP,国内大致译作“面向切面编程”。 “面向切面编程”,这样的名字并不是非常容易理解,且容易产生一些误导。 笔者不止一次听到类似“OOP/OOD11即将落伍,AOP是新一代软件开发方式”这样的发言。而在AOP中,Aspect的含义,可能更多的理解为“切面”比较合适。所以笔者更倾向于“面向切面编程”的译法。可
Spring AOP的作用,动态代理模式
AOP即面向切面编程。AOP是基于代理模式的。 代理模式: 当我们需要修改一个类,在类中加入代码时,为了不破坏这个类的封装性。可以使用代理模式,建立一个代理类。 比如:修改需求,在调用UserController类的saveUser()方法之前要判断用户是否有权限,普通的办法我们可以直接修改类中的saveUser()方法。用代理模式就是,建立一个代理类,在调用saveUser()方法之前再加...
AOP思想概述和作用
掌握Spring4 Framework的开发,理解IOC,AOP核心思想的精髓,掌握Spring事务管理,JDBCTemplate等功能的使用
SPRING AOP的作用的深层次理解
Spring上一个很好的框架,包含现在的扩展出来的很多项目,让我着实的忘记了其实j2ee框架的存在,spring的ioc成功的实现了设计模式中的工厂模式,让我们不要像以前一样设计类的创建和管理,只需一些注解和配置就行了,就能成功的实现类的管理。 IOC的工厂让我们很好的实现了对接口编程,也很好的让我们在设计过程中去实现面向对象的七大设计则,先重温下 里氏代换原则(子类是否是父类的子类判定规则)...
什么事aop,aop的作用是什么?aop在项目哪里使用到了
面向切面编程(AOP)提供另一种角度来思考程序结构,通过这种方式弥补了 面向对象编程(OOP)的不足,除了类(classes)以外,AOP提供了切面。 切面对关注点进行模块化,例如横切多个类型和对象的事务管理。 Spring的一个关键的组件就是Aop框架,可以自由选择使用AOP提供声明式企业服务,特别是为了替代EJB声明式服务。最重要的服务是声明性事务管理,这个服务建立在Spring的抽象事务管理...
AOP动态代理
代理模式,核心是为其他对象提供一种代理以控制对这个对象的访问。AOP是一种面向切面的横切技术,主要采用动态代理来实现,实现InvocationHandler接口创建代理类调用invoke方法。       动态代理类:        Interface InvocationHandler:仅定义了一个方法Object:invoke(Object obj,Method method,Obj
动态代理与AOP
需求: 有两个固定的方法,method1和method2,需要在method1和method2种插入不同的代码,为了减少代码的复用,可以使用动态代理的方式实现(当然也可以在每段代码前面都插入method1和method2,但是这种办法显得很笨拙)     结构图:     通过动态代理方法实现的aop代码: 只要通过myProxy 建立的代理类对象在调用被代理类方法时都会在开头...
aop之动态代理
前言Spring的两大特征,一个是IOC,一个是AOP。前者是控制反转,主要的思想是依赖注入,在action层我们需要service层对象,在service层我们需要dao层对象,通过Spring通过IOC技术自动我们注入对象。AOP的主要思想是在执行业务逻辑的前后,我们需要执行一些逻辑,比如日志,事务等,通过动态代理就可以完美解决这些需求。本次着重讲一下AOP。AOP实现注解相关代理相关注解/**
AOP 动态代理
  AOP 动态代理 指在程序运行期间动态的将某段代码切入到指定位置进行的编程方式; 1、导入aop模块,spring aop:spring-aspects 2、定义一个业务逻辑,在业务逻辑运行的时候将日志进行打印 3、定义一个日志切面类(logAsects):切面类里面的方法将动态感知业务逻辑方法运行到哪   通知方法:前置通知 后置通知 返回通知 异常通知 环绕通知...
aop动态代理
简单的aop动态代理小实例,有兴趣的看一下
Aop动态代理
package com.aop.proxy; import java.lang.reflect.AnnotatedType; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Arrays; ...
动态代理 AOP
package com.yyq.clouds.permision; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import org.junit.Test;  interface Subjec
动态代理之AOP
引入 转账案例:不加事务管理,出现异常时,转账错误 /** * 账户的业务层实现类 */ public class AccountServiceImpl implements IAccountService{ @Autowired private IAccountDao accountDao; @Autowired private TransactionM...
AOP和动态代理
前言 都说面向切面编程是代理模式的延续,今天就来研究一下这两者之间的关系 代理模式:一个类代表另一个类的功能。 静态代理的DEMO话不多说,先看个关于静态代理的例子:有一个shape的接口,rectangle和simpleproxy,都实现shape的接口,这个接口中有draw和erase两个方法,simpleproxy保存一个rectangle的引用,代替实体去实现“画”和“清除”的方法 接
视图的作用视图的作用
数据库中视图的做用是 使得数据更安全 数据库中视图的做用是 使得数据更安全
this的作用
this关键字,我们经常使用的一个关键字,那么我们接下来一起来看一下它究竟有什么用处。 那么this有什么用呢?其实this关键字具有一种指向作用,类似于指针的作用,可以为你的变量或方法提供一个指向。那么我们接下来通过代码来演示一下吧。 public class Demo { String name = "张三"; public static void main(String[] ...
::的作用
比如在应用程序类中调用函数重启计算机可以是ExitWindowsEx (EWX_REBOOT,0);rn但也可以是::ExitWindowsEx (EWX_REBOOT,0);那么两个有什么区别,::有什么作用
##的作用?
看到有的宏定义rn#define fun(name) int pro##name;rn是不是等价于 int proname??rn是不是##只有在宏定义上有作用rnrn
!!的作用
!!是一个很简单的方式,让任意JavaScript表达式变成Boolean的方式, 例如:!!“hello” === true and !!0 === false 参考: 忍者禁术 var store = { nextId: 1, cache: {}, add: function(fn){ if (!fn.id){ fn.id ...
的作用
vb.net中 的作用是什么?
with作用
本视频致力于打造最适合Python初学者的入门视频,站在初学者角度,从零开始、由浅入深,以朴实生动的语言来阐述复杂的问题,其中列举了大量现实中的例子进行讲解,真正做到通俗易懂。 本视频涵盖Python基础语言、流程控制、数据结构、函数、模块与包、面向对象、文件、异常等核心知识点。当学完一个章节的知识点,通过每章实用性强的案例,将所学知识综合运用到实际开发中,积累项目开发经验。
///的作用
在C#中三个斜线是什么意思??
"\" 的作用?
[code=C/C++]#define VERIFY_INITIALIZED(func) \rnif (currentApiState == STATE_UNINITIALIZED) \rn Error("pbrtInit() must be before calling \"%s()\". " \rn "Ignoring.", func); \rn return; \rn else /* swallow trailing semicolon */rn#define VERIFY_OPTIONS(func) \rnVERIFY_INITIALIZED(func); \rnif (currentApiState == STATE_WORLD_BLOCK) \rn Error("Options cannot be set inside world block; " \rn "\"%s\" not allowed. Ignoring.", func); \rn return; \rn else /* swallow trailing semicolon */rn#define VERIFY_WORLD(func) \[/code]rnrn请问这些代码中最后一行都加个"\"是什么作用啊?
##和#的作用
// #表示:对应变量字符串化 // ##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符 #include <stdio.h> #define trace(x, format) printf(#x " = %" #format "\n", x) #de...
的作用?
初学,在书上看到一段代码:rnrnrnrnrnrn ddddrnrnrnrn后面是几个rn没有select属性怎么知道应用哪个模块?rnrn书上说:这是种常用的技巧。通过这种方法,可以在后面指订不同的模板匹配规则来匹配,rn这是很便利的。rnrn这段是什么意思?看不懂,请指点。。
&的作用
For t& = 0 To File1.ListCount - 1rnrn这个&什么作用啊?rn
JVM 的作用与作用范围
请教一个问题:rnrn 在做掌上电脑、手机 的java应用程序的时候,JVM的作用是什么?是不是只要是java代码就可以通过任何JVM去执行它?rn还是每个JVM都有他自己的范围?或者必须要使用它指定的包 才能被识别?
#和##的作用
01.// #表示:对应变量字符串化   02.// ##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符
网络地址的作用,子网掩码的作用
前几天在调试板上千兆以太网的时候,板上两个以太网的地址设置是: eth0:192.168.1.10 ,netmask 255.255.255.240 eth1:192.168.1.20 ,netmask 255.255.255.240 电脑上的设置是192.168.1.4 , netmask 255.255.255.240 这样的设置从pc ping eth0可以正常工作,但到et
作用?
input type=image src=url>rnform action=/cgi-bin/post-query method=post>rninput type=image name=face src=f.gif> rninput type=radio name=zoom value=2 checked>x2rninput type=radio name=zoom value=4>x4rninput type=radio name=zoom value=6>x6 rninput type=reset>rn/form>有什么作用?
->的作用
Database . " ";rnrn?>rn上面中->的作用是什么?刚入门,呵呵,不懂...
$的作用
a db "aaa'a'",0AH,0DH,'$',最后一个字符$的作用是干嘛的啊,定义a然后将a显示出来,去掉$的话,会乱码!不知道是干嘛的,请教!!
this的作用?
在BC中,this 充当什么角色?
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法