动态代理的作用和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: 赞一个
8 个月之前 回复
qq_14811757
帅气十足的安哥 谢谢大佬的指导。。
8 个月之前 回复

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

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