提示:这本文入门使用
文章目录
前言
动态代理
前言
提示:以下是本篇文章正文内容,下面案例可供参考
动态代理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(classLoader,interfaces,h);
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()):
}
源码极其复杂,看吐了,崩溃。后续再说