欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Spring动态代理

时间:2023-08-08

提示:这本文入门使用


文章目录

前言

动态代理


前言

提示:以下是本篇文章正文内容,下面案例可供参考

动态代理

public class CalculatorProxx{
public static Calculator getProxy ( final Calculator calculator){
//获取类加载器
ClassLoader classLoader = calculator.getClass().getClassLoader (O)/获取要实现的接口
Class<?>[]interfaces = calculator.getClass().getInterfaces() ;
InvocationHandler h = new…InxocationHandler(){
@override
public 0bject invoke(Object proxy,Method method,0bject[] args) throws Throwable (
0bject result = method.invoke(calculator,args);
return result;
}
} ;
object o = Proxy.newProxyInstance(classLoaderinterfacesh);
return (Calculator)o;

获取Class<> 的方法:
1.class.forname(完全限定名) 2.(object泛指).getclass(); 3.类名.class;
内。
//ASM是什么?
ASM是一个Java字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class文件,也可以在类被加载入Java虚拟机之前动态改变类行为。Java class被存储在严格格式定义的.class文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及Java字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。说白了asm是直接通过字节码来修改class文件。
部类调用的参数定义final

public static void main(String[]args) {
//创建cglib获取代理对象的操作对象
Enhancer enhancer = new Enhancer() ;
//设置enhancer对象的父类
enhancer.setSuperclass(MyCalculator.class) ;
//设置enhancer的回调对象
enhancer.setCallback(new MyCglibO);
//创建代理对象
MyCalculator myCalculator = (MyCalculator) enhancer.create():myCalculator.add( i: 1,j: 1);
System、out.println(myCalculator.getClass()):
}

源码极其复杂,看吐了,崩溃。后续再说

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。