Добавление / изменение аннотаций в проекте java

У нас есть библиотека Java-кода, которую мы намерены использовать в проектах. Некоторые из этих проектов потребуют добавления аннотаций к объектам Java в этой библиотеке (то есть в одном проекте эти объекты будут использоваться в реализации сервлетов JAX-RS, поэтому их необходимо аннотировать с помощью аннотаций JAXB, JSON и т. Д.). Проблема, с которой я сталкиваюсь, заключается в том, что я не мог понять, как добавить эти аннотации, не меняя исходную библиотеку.

Рассмотрим этот пример:

public class MyClass { private String field1; private int field2; } 

В некоторых проектах я хотел бы, чтобы класс вел себя так, как будто это было

 public class MyClass { @Annotation1 private String field1; @Annotation2 private int field2; } 

Первоначально я думал об использовании интерфейсов или производных классов, которые были отдельно аннотированы, но не могли понять, как это сделать (или это возможно или нет). Я также нашел предложение Javassist в этом потоке (например, метод манипулирования байт-кодом Java), но проблема в том, что это необходимо для работы с клиентами Android, поэтому для меня это не вариант. На данный момент у меня нет идей.

Буду признателен, если кто-то может помочь в любом случае. Может быть, я что-то упустил, или, может быть, то, что я пытаюсь сделать, это неправильный путь. В любом случае мне нужно некоторое руководство для продолжения.

Большое спасибо заранее.

Я рассмотрел это больше и как резюме, вот что я нашел:

  • Язык Java не позволяет изменять аннотации во время выполнения.
  • Можно использовать Javassist для изменения java-байт-кода, но он не работает на таких платформах, как Android.
  • Можно использовать ASM, но это касается работы с сборкой Java (пример здесь: http://community.jboss.org/thread/150002 ).

В первую очередь из-за того, что JAXB не присутствовал на Android (и по другим причинам), мы переключились на JSON и начали использовать Jackson в качестве реализации. Одним из преимуществ этого изменения была способность использовать то, что Джексон называет «смешанными аннотациями», что именно то, что я искал.

Вот ссылка, которая объясняет это больше: http://www.cowtowncoder.com/blog/archives/2009/08/entry_305.html

Не удалось взломать байт-код .class во время выполнения, это невозможно. Вы можете использовать Javassist, если вы действительно хотите динамически изменять байт-код классов библиотеки во время выполнения, но в большей картине это, вероятно, в конечном итоге сильно раздувается.

Я бы предположил, что вы просто комментируете библиотеку и перекомпилируете ее свою кодовую базу. Если это не так, вы можете поместить классы библиотеки / интерфейсы в свои собственные классы / интерфейсы через наследование и комментировать их. В любом случае, я думаю, что было бы лучше комментировать код, чем через хак-код. Добавленный бонус, аннотации в источнике будут видны IDE, что позволит IDE лучше помочь вам.