Re: Class.forName
Roedy Green wrote:
Is there a way to ask if a class has been loaded without actually
requesting it be loaded? similar to Class.forName
My suggestion would be to use an agent.
import java.lang.instrument.Instrumentation;
public class TraceAgent {
public static void premain(String args, Instrumentation inst) {
inst.addTransformer(new TraceTransformer());
}
}
and
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;
import java.util.HashSet;
import java.util.Set;
public class TraceTransformer implements ClassFileTransformer {
private static Set<String> clz = new HashSet<String>();
public byte[] transform(ClassLoader loader,
String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDomain,
byte[] classfileBuffer) throws
IllegalClassFormatException {
clz.add(className.replace("/", "."));
return null;
}
public static boolean isLoaded(String className) {
return clz.contains(className);
}
}
and then check with:
TraceTransformer.isLoaded(clznam)
Arne