Spring动态代理

Spring动态代理,第1张

Spring动态代理

提示:这本文入门使用


文章目录

前言

动态代理


前言

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

动态代理

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()):
}

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5722114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存