zoukankan      html  css  js  c++  java
  • Spring框架中2种生成代理对象的方法

    Spring框架中2种生成代理对象的方法

    Jdk Proxy基于接口生成代理对象,只能赋值给接口的引用(默认使用jdk)。

    Spring进一步封装 CGLIB,基于实现类生成代理对象,既可以赋值给接口的引用,也可以赋值给实现类的引用

    JDK提供的Proxy,和spring进一步封装的CGLIB。二者生成的代理没有任何区别,生成的都是代理对象。只是生产方式不同,前者是基于接口生成代理,后者基于实现类生成代理对象

    如何切换spring框架中默认生成代理的方式

    <aop:config proxy-target-class=”true|false”></aop:config>

    True代表使用目标类生成代理

    False代表使用jdk的proxy接口生成代理(默认)

    Proxy(代理):静态代理和动态代理

    作用:起到传递会话的作用,中断整个会话。

    好处:在完成核心业务的同时,做一些附加的操作。

    目标类(target):被代理类称之为目标类。

    开发代理的原则:和目标类功能一致且实现相同的接口。

    静态代理

    开发一个代理类,手动的为每个业务类添加代理方法,能够完成代理的功能。

    问题:往往在开发中,书写的不仅仅是一个或两个业务层,开发的业务层有很多,如果为每一个业务层开发一个静态代理类,不仅没有减轻工作量,反而增加了工作量。于是就提出了动态代理的方法,为现有的业务层在运行的过程中动态创建代理类,通过动态代理类去解决现有业务层中业务代码冗余的问题。

    动态代理

    通过jdk提供的proxy这个类,动态为现有的业务生成代理类。

    Proxy.newProxyInstance(loader,interfaces,h); //返回值就是动态代理对象

    参数一:当前线程类加载器

    参数二:生成代理类的接口类型

    参数三:通过代理对象调用方法是会优先进入参数三中的invoke方法

  • 相关阅读:
    B. Xor of 3 题解(思维+构造)
    小 L 与 GCD 题解(数学 hard)
    F. Clear The Matrix 题解(状压dp)
    小顶堆与大顶堆的自定义cmp函数
    字符指针、字符数组
    python中创建dict对象
    中缀表达式转后缀表达式
    vue中keep-alive,include的缓存问题
    vue 冒号 :、@、# 是什么意思? v-bind v-on v-slot v-是指令
    vue 自定义指令 v-
  • 原文地址:https://www.cnblogs.com/lkldeblog/p/10685848.html
Copyright © 2011-2022 走看看