方法 ClassFileTransformer.transform(ClassLoader classLoader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) 的 J2SE 5.0 规范告诉:
每一个新的类定义和每一个类的重新定义都会调用transformer。使用 ClassLoader.defineClass 请求新的类定义。使用 Instrumentation.redefineClasses 或其本机等效项提出类重定义请求。在验证或应用类文件字节之前,在处理请求期间调用转换器。
使用这些信息,我不能说是否可以为同一个运行时类(classLoader&className)同时调用方法 ClassFileTransformer.transform。我知道可以为同一个类同时调用 Instrumentation.redefineClasses 方法,但这并不意味着这样的调用会导致对同一个类同时调用 ClassFileTransformer.transform。有什么办法可以澄清我的不理解吗?
这对我来说很重要,因为我使用 Javassist 进行转换,并且可以从同时运行的方法 ClassFileTransformer.transform 中使用相同的 CtClass 实例。目前我在 synchronized(ctClass) 块中使用 CtClass 实例,以防万一。