我有一个trirdparty api,它包含一个类(比如说a)。它有一个奇怪的静态块,类似于以下内容:
class A
{
static
{
try
{
System.loadLibrary("libraryName");
}
catch(UnsatisfiedLinkError ue)
{
System.exit(0);
}
}
//other stuff
}
我想用覆盖的
System.exit()
阻止对SecurityManager
的调用。但是,我想在执行此SecurityManager
块之前覆盖static
,然后立即恢复原始安全管理器。我知道如何替换/覆盖/恢复
SecurityManager
。我的问题是如何确定何时调用
static
块[基本上是何时加载类],以便在这之前,我将使用自己的SecurityManager
来阻止System.exit()
并在这之后恢复原始的SecurityManager
。请注意,仅在执行静态块时的持续时间内重写安全管理器非常重要。
编辑:
由于许可原因,不能更改源。
最佳答案
为什么不能使用一些字节码处理库(比如javassist)来将静态{}块替换为所需的块呢?