`
daxiaoli123
  • 浏览: 46708 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

spring 动态代理

阅读更多
Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类,这是一套非常灵活有弹性的代理框架。 


动态代理是在运行时在内存中构建的一种类型,该类型实现了接口I,但是它将所有的方法调用
都转发给类型A。



1.代理模式的作用和定义:
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接
引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。


2.代理模式中涉及的角色
抽象角色:声明真实对象和代理对象的共同接口;一般声明为抽象类或是接口.
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提
供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对
象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
3.三个例子
4.真实角色必须是事先已经存在的,并将其作为代理对象的内部属性。但是实际使用时,一个真实
角色必须对应一个代理角色,如果大量使用会导致类的急剧膨胀;


在实际使用时,第一个参数obj一般是指代理类,method是被代理的方法,如上例中的dothing()
,args为该方法的参数数组。 这个抽象方法在代理类中动态实现。


通过这种方式,被代理的对象(RealSubject)可以在运行时动态改变,需要控制的接口(Subject
接口)可以在运行时改变,控制的方式
(DynamicSubject类)也可以动态改变,从而实现了非常灵活的动态代理关系。


动态代理:



  比如我们现有一百个类,每个类都有很多的方法,而我们在调用的时候根本不关心他是那个
类的那个方法,只需要能够达到我们的目标就可以了。
   但是现再我们要明确的知道我们调用是那个类里的那个方法,而且还要在执行的这个方法之
前或者结束的时候执行一些特殊的语句时。这样就很不方便了,我们的每个方法都要加上相同
的语句。
   为了解决这个问题,随之就出现了代理了。代理分为了二种:


静态代理与动态代理,
   静态代理类:
    由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的
.class文件就已经存在了。
   动态代理类:在程序运行时,运用反射机制动态创建而成。
   在这里我使用的是动态代理,下面讲一下动态代理吧:
   什么是动态代理呢?   
  为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直
接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
怎样使用动态代理呢:


 1.
   动态代理的核心是一个InvocationHandler,我们要实现这个接口,创建自己的调用处理器;然后覆盖里面的
   invoke方法,我们可以在这里面设定他的权限,如那些方法不需要在方法执行前或者执行后执行一些
    别的语句,或者设定那个包下的所有方法不需要执行这些语句。如果后面我又想使用这些方法
    都执行这些语句时,我们只要在invoke里面判断一下就可以了,这样很方便。


 2.通过为Proxy类指定ClassLoader对象和一组interface来创建动态代理类;
 3.通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
 4.通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。




在我们使用的时候,invoke的第一个参数obj一般是指代理类,method是被代理的方法,如上例
中的dothing(),args为该方法的参数数组。 这个抽象方法在代理类中动态实现。
通过动态代理,被代理的对象可以在运行时动态改变,需要控制的接口可以在运行时改变,控制
的方式也可以动态改变,从而实现了非常灵活的动态代理关系。
分享到:
评论

相关推荐

    spring动态代理类的示范小版本,很简单的例子

    Spring 动态代理是Spring框架中的一个重要特性,它允许我们在不修改原有代码的情况下,为对象增加额外的功能。这个"spring动态代理类的示范小版本,很简单的例子"应该是提供了一个简单易懂的示例,帮助我们理解...

    spring动态代理

    Spring 动态代理是 Spring 框架中的一个重要特性,它允许我们在运行时自动生成代理对象,以便在方法调用前后执行额外的操作,比如事务管理、AOP(面向切面编程)等。动态代理主要涉及两个核心接口:`java.lang....

    Spring动态代理

    在Spring框架中,动态代理是一种重要的技术,它主要用于AOP(面向切面编程)场景,如日志记录、事务管理等。本篇文章将深入探讨Spring动态代理及其在Spring MVC中的应用,特别是在创建RESTful服务时如何利用注解来...

    spring动态代理原理

    本篇文章将深入探讨Spring动态代理的原理,并通过代码示例来解析其工作流程。 首先,我们需要理解JDK中的动态代理机制。Java提供了一种称为接口代理的机制,即通过`java.lang.reflect.Proxy`类和`java.lang.reflect...

    spring+动态代理

    Spring框架提供了一种便捷的方式来实现动态代理,这使得我们可以在不修改原有代码的情况下扩展或增强已有功能。在本篇中,我们将深入探讨Spring如何使用动态代理以及其在实际开发中的应用。 动态代理的核心概念是...

    Spring动态代理二.docx

    Spring 动态代理二 Spring 框架中动态代理技术的应用是非常广泛的,今天我们将讨论 Dao 层和 Service 层的动态代理二。 Dao 层的动态代理二: Dao 层的动态代理二是通过 MapperScannerConfigurer 实现的。这是一...

    四、Spring源码分析——动态代理

    在Spring框架中,动态代理是实现AOP(面向切面编程)的核心技术之一。它允许我们在不修改原有代码的情况下,为方法添加额外的功能,如事务管理、日志记录等。本篇文章将深入探讨Spring中的动态代理机制,以及它是...

    Spring动态代理第三方依赖jar.zip_aopalliance_1.0.jar_aspectjrt_aspectjweav

    Spring的核心特性之一就是它的动态代理机制,这使得我们可以实现面向切面编程(AOP)。本压缩包包含的是Spring动态代理中需要用到的一些关键第三方依赖,包括aopalliance-1.0.jar、aspectjrt-1.7.2.jar以及...

    cglib aop spring 动态代理

    jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在...

    Spring动态代理一.docx

    在Spring框架中,动态代理是一种重要的机制,它主要用于AOP(面向切面编程)和事务管理。本篇文章将深入探讨Spring如何对Dao层和服务层进行动态代理,以及它与MyBatis集成的过程。 首先,Spring集成MyBatis的步骤...

    Spring 动态代理和aop切面编程例子

    在Spring框架中,动态代理和AOP(面向切面编程)是两个重要的概念,它们极大地增强了代码的可维护性和灵活性。下面将详细讲解这两个概念及其实际应用。 动态代理,是Spring提供的一种机制,允许我们在不修改原对象...

    动态代理和注解Spring.rar

    本资料“动态代理和注解Spring.rar”着重介绍了Spring框架中的两个关键概念:动态代理和注解的使用。 首先,我们来深入了解Spring中的动态代理。动态代理在Spring AOP(面向切面编程)中扮演着重要角色。AOP允许...

    Java动态代理(Spring Aop原理)

    在Spring框架中,AOP(面向切面编程)就是基于Java动态代理来完成的,用于实现横切关注点,如日志、事务管理等。这篇博客的文章链接虽然没有给出具体内容,但我们可以根据Java动态代理和Spring AOP的基本概念来深入...

    spring之AOP(动态代理)

    在Spring中,AOP主要通过两种动态代理技术实现:JDK动态代理和CGLIB动态代理。 首先,让我们详细了解一下JDK动态代理。JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK...

    spring 的动态代理详解

    ### Spring的动态代理详解 #### 引言 在软件工程领域,代理模式是一种常见的设计模式,主要用于增强对象的功能,而不改变其原有的结构。Spring框架利用动态代理技术为Bean提供了横切关注点(如事务管理、日志记录...

    spring jdk动态代理

    Spring AOP允许我们通过代理来实现横切关注点,如日志、事务管理等,而JDK动态代理则是Spring AOP实现的一种方式。本文将深入探讨Spring如何利用JDK动态代理技术来实现这一功能,并通过实例解析其底层实现。 首先,...

    Spring的静态代理和动态代理

    总结来说,Spring的静态代理和动态代理都用于实现AOP,静态代理适用于简单场景,但需要手动编写代理类,而动态代理则更加灵活,可以在运行时动态创建代理对象,适用于接口众多的情况。了解和掌握这两种代理模式对于...

    Spring框架中JDK动态代理和cglib动态代理

    Spring 框架中 JDK 动态代理和 CGLIB 动态代理是 Spring AOP 中一个非常重要的知识点。Spring AOP 框架会根据实际情况选择使用 JDK 的动态代理还是 CGLIB 的动态代理。 JDK 动态代理是 Java 自带的动态代理机制,它...

Global site tag (gtag.js) - Google Analytics