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

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

0

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的作用

1
caozhy
操作员马善福(贵阳专业挖机) 回复qq_14811757: 赞一个
7 个月之前 回复
qq_14811757
帅气十足的安哥 谢谢大佬的指导。。
7 个月之前 回复

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

0
qq_14811757
帅气十足的安哥 谢谢大佬的指导。。
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java 动态代理作用是什么 ==AOP?
关于动态代理设计模式很可能题主就在不知不觉中使用了,例如Spring中的AOP,Struts2中的拦截器等。 先来看静态代理模式代码: package test; public interface Subject { public void doSomething(); } package test; public class RealSubj
Spring AOP的作用,动态代理模式
AOP即面向切面编程。AOP是基于代理模式的。 代理模式: 当我们需要修改一个类,在类中加入代码时,为了不破坏这个类的封装性。可以使用代理模式,建立一个代理类。 比如:修改需求,在调用UserController类的saveUser()方法之前要判断用户是否有权限,普通的办法我们可以直接修改类中的saveUser()方法。用代理模式就是,建立一个代理类,在调用saveUser()方法之前再加...
Spring AOP&&动态代理(一)
AOP :面向切面的编程   是对OOP的扩展 OOP :引入封装、继承、多态等概念来建立一种对象层次结构;OOP允许开发者定义纵向关系,而不能处理横向关系;像类似日志记录、异常处理这种代码都是横向散落在代码中,它与核心业务代码无关,这种散落各处的无关代码称为横切,在OOP中它导致了大量代码的重复,且不利于各模块的复用。。 AOP:与OOP相反,采用 “横切”技术,解剖封装的对象内部,将影响多...
Java动态代理+注解体现Spring AOP思想
在MVC的架构中,优秀的代码是Service业务层只做业务逻辑处理,如果要添加新功能(如日志,事务等),不应该污染业务层代码。 讲得很抽象,简单来说,如果我要在业务层添加日志功能,在业务层代码内不应该出现Logger这个东西。 想知道怎么实现吗?使用JAVA的动态代理技术,这里体现了Spring AOP切面编程的思想。 1. 什么是动态代理?查理论能查几页纸,这里简单总结一句话:调用Pr
Spring AOP面向切面编程及两种动态代理
面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 面向切面编程:就是在原直线编程的某处咔嚓一下,加点动西,而且不影响原来的代码。可以用在日志,加权限,事物,异常管理等方面。 代理(Proxy)是
Spring AOP中通过JDK动态代理的实现原理
AOP相关概念advice 通知: 定义在切入点织入的行为逻辑(常用device有 BeforeDevice,AfterDevice,ThorwsDevice)pointcut 切点:决定Advice通知应该作用于那个连接点,也就是说通过Pointcut切点来定义需要增强的方法的集合通过观察Pointcut类的继承关系(向下关系),在Point cut的基本接口定义中可以看到,需要返回一个Meth...
AOP和动态代理的理解 [仅供参考]
AOP实现机制和代理
动态代理AOP的配置(包括cglib-nodep-2[1].2.2 jar包)
Common.java package com.aspect; public class Common { public void fn() { System.out.println("****************"); } public void tc() { System.out.println("|||||||||||||||||"); }
Spring 之 AOP 动态代理实现原理
pom.xml 4.0.0 cn.et SpringAopPrinciple 0.0.1-SNAPSHOT org.springframework spring-beans 4.3.9.RELEASE org.springframework spring-context 4.3.9.RELEASE
面向切面编程(AOP)动态代理
面向切面编程(AOP)动态代理   Aspect Oriented Programming(AOP)面向切面编程是一种范式和思想,并不是特指某一种编程语言。下面这句话是知乎上的一个总结: 在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程     比如写一个管理学生老师的简单数据库     我们需要用InvocationHandler 来声明一个对象...
动态代理在mybatis中的应用
mybatis最令人印象深刻的特性恐怕就是interface与mapper的映射了。开发者只需要声明接口,并编写对应在xml中的sql,一个可以提供服务的dao层功能就完成了,竟然不需要编写interface的实现类。这个感觉起来非常神奇也令人疑惑不解的特性正是利用jdk的动态代理技术实现的。事实上,mybatis内部使用了多种动态代理技术,包括jdk自带、javassist、cglib等,这篇文...
Java JDK 动态代理(AOP)使用及实现原理分析
一、什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。 代理模式UML图: 简单结构示意图: 为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以...
Spring源码学习【六】AOP原理解析(二)拦截器链
目录 一、前言 二、源码学习 一、前言 通过上一篇 Spring源码学习【六】AOP原理解析(一)代理对象的生成 的学习,我们知道了Spring是通过后置处理器来生成代理对象的,且获取到代理对象后会阻止原Bean的默认实例化行为,从而将代理对象提供给用户使用,并通过代理对象实现对目标对象的增强,有了这些知识储备,我们继续以JdkDynamicAopProxy为例,学习一下代理对象是如何对目...
JavaEE AOP代理——JDK动态代理
JDK动态代理是通过java.lang.reflect.Proxy类来实现,我们可以调用Proxy类的newProxyInstance()方法来创建代理对象,对于使用业务接口的类,Spring,默认会使用JDK动态代理实现AOP 下面通过一个案例来演示Spring中JDK动态代理的实现过程,具体步骤如下: 1、创建一个名为chaoter03的web项目,导入Spring框架所需的JAR包到项目...
spring aop中应用的适配器模式
spring aop框架对BeforeAdvice、AfterAdvice、ThrowsAdvice三种通知类型的支持实际上是借助适配器模式来实现的,这样的好处是使得框架允许用户向框架中加入自己想要支持的任何一种通知类型,上述三种通知类型是spring aop框架定义的,它们是aop联盟定义的Advice的子类型。 位于org.springframework.aop.framework.adap...
动态代理实现AOP机制
动态代理实现AOP机制,动态代理实现AOP机制,动态代理实现AOP机制,动态代理实现AOP机制
Java动态代理的理解(知乎转发)
在知乎上看到一个很好的关于Java动态代理的回答,并且例子也很经典,留着今后复习用了。 Java动态代理相关 先来看静态代理模式代码: package test; public interface Subject { public void doSomething(); } package test; public class RealSubject impl
Java代理模式和kotlin代理模式
简述: Aspect Oriented Programming 面向切片编程 aop   需求目标: 1.在某个项目中你已经写好了一部分代码,现在想要给这一部分代码添加一个新的附加的功能,并且屏蔽原来代码中不想被调用的代码,总结起来就是中间隔离-开闭原则   思考一下,为了满足这个要求我们新建一个类用这个类继承原来的接口,我们称这个类为代理类,我们用这个代理类去重写接口的方法,并在方法
动态代理实现AOP
今天说和小张哥一起讨论AOP,正好看到了相关的视频,今天就总结一下AOP是如何使用动态代理来实现的。AOP对JAVA程序员来说并不陌生,他是spring的一个核心内容——面向切面编程,先把概念放在这里,因为这一篇博客不会展开讲述AOP是什么,而是讲一讲他的来源——动态代理。我们先来看一个例子:有一个接口:UserManager,还有就是接口的实现类UserManagerImplUserManager
Spring动态代理机制理解
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。在java的动态代理机制中,有两个重要的类或接口,一...
Java动态代理的作用及好处
Java动态代理的优势是实现无侵入式的代码扩展;也就是方法的增强,让你可以在不用修改源码的情况下,增强一些方法;在方法的前后你可以做你任何想做的事情(甚至不去执行这个方法就可以)。 1.动态代理是设计模式中的代理模式: 定义:为其它对象提供一种代理以控制对这个对象的访问控制;在某些情况下,客户不想或者不能直接引用另一个对象,这时候代理对象可以在客户端和目标对象之间起到中介的作用。 2.静态代...
java动态代理和aop的对应关系
   昨天介绍了下httpclient,其中涉及到aop的使用,其实aop的底层是用java动态代理实现的。动态代理其实就是用java.lang.reflect.InvocationHandler和java.lang.reflect.Proxy进行操做, 这个使用也是比较简单的,记得一年前我刚开始学Java的时候,这个是我最难理解的。其实动态代理是在运行时创建代理对象,从而在实际调用方法(通过反射...
AOP实现原理(一)JDK动态代理
背景 在前几篇文章中,我们介绍了AOP的使用方法,辣么AOP为何会如此神奇呢?通过查阅资料,我们了解到AOP的实现是通过代理去实现。 在分析问题之前我们应该有如下几点疑问: 1. 什么是代理。 2. AOP实现代理方式有几种,这几种方式各有什么优点。 3. 如何去实现AOP的代理方式。 介绍 动态代理 : 在程序运行期间由Java反射等机制动态生成,也就是在将class加载到j...
AOP的两种动态代理机制
JDK动态代理和Cglib动态代理GitHub:https://github.com/ConanDennis/dynamicProxyDemoJDK静态代理:jdk静态代理实现比较简单,一般是直接代理对象直接包装了被代理对象JDK动态代理:1.能够继承静态代理的全部优点.并且能够实现代码的复用.2.动态代理可以处理一类业务.只要满足条件 都可以通过代理对象进行处理.3.动态代理的灵活性不强.4.J...
动态代理以及动态代理如何实现AOP
动态代理以及动态代理如何实现AOP 一、代理设计模式          什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。         举例:晚会的主办方要举行歌舞表演,要找歌手唱歌和跳舞 ,主办方会找歌手的经纪人来确认沟通直至签合同,这样在
Spring AOP的实现——动态代理机制
在java的动态代理中,有两个重要的类或者接口,一个是InvocationHandler(Interface)、另一个是Proxy(Class),这一个类和接口是实现动态代理所必须的。 InvocationHandler:每一个动态代理类都必须实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会
Java 动态代理作用是什么?
主要用来做方法的增强,让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情(甚至根本不去执行这个方法),因为在InvocationHandler的invoke方法中,你可以直接获取正在调用方法对应的Method对象,具体应用的话,比如可以添加调用日志,做事务控制等。 动态代理是设计模式当中代理模式的一种。 代理设计模式 定义:为其他对象提供一种代理
AOP源码解析(一)实现动态代理
动态AOP使用示例 面向对象编程有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志,安全检测等,我们只有在每个对象里引入公共行为,这样程序中就产生了大量的重复代码,所以有了面向对象编程的补充,面向切面编程(AOP'),AOP所关注的方向是横向的,不同于OOP的纵向。下面是一个AOP的示例 (1)创建用于拦截的bean。 在实际工作中,此bean可能是满足业务需要的核心
AOP两种动态代理的区别
https://blog.csdn.net/z55887/article/details/81837388   spring 中 AOP是基于 “动态代理” 实现,其采用了两种方式: java代理:采用java内置的代理API实现 cglib代理:采用第三方API实现 本文主要阐述这两种方式的区别 动态代理和静态代理 静态代理:编译时将增强代码植入class文件,因为是编译期进行的增强...
Spring AOP --JDK动态代理方式
我们知道Spring是通过JDK或者CGLib实现动态代理的,今天我们讨论一下JDK实现动态代理的原理。 一、简述 Spring在解析Bean的定义之后会将Bean的定义生成一个BeanDefinition对象并且由BeanDefinitionHolder对象持有。在这个过程中,如果Bean需要被通知切入,BeanDefinition会被重新转换成一个proxyDefinition(其
【SpringAOP】——JDK动态代理
Spring的动态代理有两种:一是JDK的动态代理(需要提供接口);另一个是cglib动态代理(通过修改字节码来实现代理)。大部分情况下,一般使用JDK动态代理,因为JDK动态代理的速度要比CGLIB要快,在SpringAOP中,如果一个Bean有接口声明,那么Spring就会使用JDK动态代理代理它,否则启用CGLIB。今天咱们主要讨论JDK动态代理的方式。JDK的代理方式主要就是通过反射跟动态
Spring AOP动态代理例子
对Oracle数据库的部门表进行增删改查: 话不多说; 1.实体类可以不写.hbm.xml文件直接写注解方式: package com.jadeon.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.
JDK动态代理与AOP
java代理机制 什么是代理 代理是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。 为什么要使用代理对象 增强额外的功能操作 开闭原则 代理模式中的三种角色 抽象角色 真实角色 代理角色 代理模式种类 静态代理 代理类需要开发人员实现,代理类和目标类之间代理关系在编译时就已经确定 如何开发静态代理类,例子: 静态代理的优势: 在不修改
spring 静态代理,动态代理理解
    自定义一个业务类 ,实现这个类中方法的增强,用动态代理实现 在这里主要说jdk动态代理实现,先说静态代理,在静态代理的基础上理解动态代理 静态代理: 业务类,也就是目标类  代理类: 对那些方法可以增强,我们称为连接点 在代理类中实例化目标类对象,可以在调用目标类的方法前后增强该方法,但是这样的弊端是,每一个目标类,都要写一个代理类,来对其方法手动增强,而且增强的方...
AOP的实现原理—反射与动态代理
其实AOP的意思就是面向切面编程。OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决解决问题的方法中的共同点,是对OO思想的一种补充!还是拿人家经常举的一个例子讲解一下吧:比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行做全面监控,或部分监控。也许我们就会在要一些方法前去加上一条日志记录,我们写个例子看看我们最简单的解决方案。 p
Sping-AOP:cglib动态代理与JDK动态代理的区别
默认状态下,Spring-AOP默认使用JDK动态代理,当需要代理的对象没有实现任何接口时,才使用cglib动态代理。一、JDK动态代理JDK动态代理的对象必须实现接口,当某个对象没有实现接口时,就会
AOP的静态代理和动态代理
转载出处:http://listenzhangbin.com/post/2016/09/spring-aop-cglib/AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理
Android 动态代理以及利用动态代理实现 ServiceHook
Android 利用 ServiceHook 实现特殊功能
AOP的实现原理 —— 静态代理 和 动态代理( Spring AOP)
这里的AOP指的是面向切面编程思想,而不是Spring AOP 。 AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。 AOP实现主要分为 静态代理 和 动态代理 。 - 静态代理 主要是 `AspectJ` - 动态代理 主要是 `Spring AOP`
AOP之静态代理VS动态代理
一、代理概念         为某个对象提供一个代理,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,代理类负责请求的预处理,过滤,将请求分配给委托类处理。 二、静态代理:          由程序员创建或工具生成代理类的源码,再编译代理类,即代理类和委托类的关系再程序运行前就已经存在。现有一User接口,对user的增删改查,User的实现里面分别有对每个方法的安全性检查,使用
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习大数据作用 数据库原理课程的作用