先上结论:
java层要进行hook骚操作,核心技术就是动态代理,切入点就是class类中的静态成员属性。
开干:
1、java动态代理原理
Java动态代理是Java中一种强大的特性,它允许在运行时动态地创建代理类和代理对象,而无需在编译时确定代理类的具体类型。动态代理常常用于AOP(面向切面编程)等场景。
Java动态代理的原理涉及两个主要类:Proxy和InvocationHandler。
1)Proxy类:Proxy是Java提供的用于创建代理类的工具类。它提供了一个静态方法newProxyInstance,该方法可以动态生成一个代理类的实例。
2)InvocationHandler接口:InvocationHandler是一个接口,定义了一个唯一的方法invoke(Object proxy, Method method, Object[] args)。在动态代理中,我们必须实现这个接口,并在invoke方法中编写代理对象的具体逻辑。
2、动态代理的步骤如下:
1)创建一个实现了InvocationHandler接口的类,该类将包含对代理对象方法的具体处理逻辑。
2)使用Proxy类的newProxyInstance方法来创建代理对象。该方法需要三个参数:
ClassLoader:类加载器,用于加载代理类。
Class[]:代理类需要实现的接口列表。
InvocationHandler:InvocationHandler接口的实现类实例。
3)当调用代理对象的方法时,实际上是调用了InvocationHandle