Я пытаюсь добавить некоторые аннотации к классам во время их загрузки.
Для этого я написал преобразователь агента Java, который получает байт-код класса при загрузке и может его изменить. Когда я запускаю следующий код, в классе появляется новая аннотация, но все предыдущие аннотации и поля/методы удаляются.
CtClass ctClass = classPool.makeClass(new java.io.ByteArrayInputStream(classFileBuffer));
ClassFile classFile = clazz.getClassFile();
ConstPool constPool = classFile.getConstPool();
AnnotationsAttribute attr= new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag);
javassist.bytecode.annotation.Annotation annotation = new javassist.bytecode.annotation.Annotation(type, constPool);
attr.setAnnotation(annotation);
classFile.addAttribute(attr);
classFileBuffer = ctClass.toBytecode();
Где classFileBuffer — массив байтов, возвращаемый загрузчику классов. Если у кого-нибудь есть идея, почему аннотации и код предыдущего класса удалены, это будет очень полезно.
Спасибо,
Авнер