|
JavaTM Platform Standard Ed. 6 |
|||||||||
��һ���� ��һ���� | ��� ��� ������ | |||||||||
ժҪ�� Ƕ�� | �ֶ� | ���췽�� | ���� | ��ϸ��Ϣ�� �ֶ� | ���췽�� | ���� |
public interface ClassFileTransformer
һ���ṩ�˽ӿڵ�ʵ����ת�����ļ��Ĵ�����ת���� JVM ������֮ǰ������
ע�⣬���� The Java Virtual Machine Specification �� The class File Format һ���еĶ���ʹ���������ļ�����ָ�����ļ���ʽ��ʾ���ֽ����У�������Щ�ַ��Ƿ�פ�����ļ��С�
Instrumentation
,
Instrumentation.addTransformer(java.lang.instrument.ClassFileTransformer, boolean)
,
Instrumentation.removeTransformer(java.lang.instrument.ClassFileTransformer)
����ժҪ | |
---|---|
byte[] |
transform(ClassLoader loader,
String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDomain,
byte[] classfileBuffer)
�˷�����ʵ�ֿ���ת���ṩ�����ļ���������һ���µ��滻���ļ��� |
������ϸ��Ϣ |
---|
byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException
������װ�������� Instrumentation.addTransformer(ClassFileTransformer,boolean)
�� canRetransform
����ȷ����
canRetransform
��Ϊ true ����������ת����
canRetransform
��Ϊ false ����ʹ�� Instrumentation.addTransformer(ClassFileTransformer)
����������ת����
��ת����ʹ�� addTransformer
ע��֮��ÿ�ζ���������ض�����ʱ�������ø�ת������ÿ����ת����ʱ�������ÿ���ת��ת�����������ඨ�������ͨ�� ClassLoader.defineClass
���䱾���ȼ۷������С������ض��������ͨ�� Instrumentation.redefineClasses
���䱾���ȼ۷������С�������ת��������ͨ�� Instrumentation.retransformClasses
���䱾���ȼ۷������С�ת����������֤��Ӧ�����ļ��ֽ�֮ǰ�������������е��õġ�
�����ڶ��ת����ʱ��ת������ transform
��������ɡ�
Ҳ����˵��һ�� transform
���÷��ص� byte ���齫��Ϊ��һ�����õ����루ͨ�� classfileBuffer
��������
ת����������˳��Ӧ�ã�
������ת����������ò�����ת��ת��������������ǰһ��ת���Ľ������������������������ô˷�������ÿ�����ֵ������У�ת����������ע���˳����á�����ת������ Java ����� Tool �ӿ��е� ClassFileLoadHook
�¼��ṩ��
��һ��ת���������루ͨ�� classfileBuffer
���������£�
ClassLoader.defineClass
�� byte
definitions.getDefinitionClassFile()
������ definitions
�� Instrumentation.redefineClasses
�IJ���
Instrumentation.retransformClasses
���ʵ�ַ���ȷ������Ҫ����ת������Ӧ���� null
��������������һ���µ� byte[]
���飬������ classfileBuffer
��ͬ������Ҫ��ת�����Ƶ����У���������������顣���������� classfileBuffer
��
����ת�����ض����У�ת��������֧���ض������壺���ת�����ڳ�ʼ�����ڼ���ĵ������Ժ�Ҫ��ת�����ض��壬��ôת��������ȷ���ڶ���������ļ��ǵ�һ��������ļ��ĺϷ��ض����ļ���
���ת�����׳��쳣��δ������쳣��������ת������Ȼ�������ò����أ���Ȼ�������ض������ת������ˣ��׳��쳣�뷵�� null
��Ч����ͬ����Ҫʹ��ת��������������δ�����쳣ʱ��ֹ��ϣ����������Ϊ��������ת�������� Throwable
��
���ת������Ϊ classFileBuffer
����ʾһ����Ч��ʽ�����ļ������׳� IllegalClassFormatException
���������뷵�� null ��Ч����ͬ���������ڶԸ�ʽ�ٻ����м�¼����ԡ�
loader
- ����Ҫת��������������������������������Ϊ null
className
- ��ȫ�����ڲ���ʽ�������ƺ� The Java Virtual Machine Specification �ж���Ľӿ����ơ����磬"java/util/List"
��classBeingRedefined
- ����DZ��ض������ת����������Ϊ�ض������ת�����ࣻ���������أ���Ϊ null
protectionDomain
- Ҫ������ض������ı�����classfileBuffer
- ���ļ���ʽ�������ֽڻ������������ģ�
null
��
IllegalClassFormatException
- ������벻��ʾһ����ʽ���õ����ļ�Instrumentation.redefineClasses(java.lang.instrument.ClassDefinition...)
|
JavaTM Platform Standard Ed. 6 |
|||||||||
��һ���� ��һ���� | ��� ��� ������ | |||||||||
ժҪ�� Ƕ�� | �ֶ� | ���췽�� | ���� | ��ϸ��Ϣ�� �ֶ� | ���췽�� | ���� |
��Ȩ���� 2007 Sun Microsystems, Inc. ��������Ȩ���� ����������֤��������������ĵ����·ַ�������