Как поставщик API Framework с открытым исходным кодом для жизненного цикла, я хочу изо всех сил стараться скрывать внутренние проекты с помощью неявного способа предоставления API Lifecycle, чтобы принесет гораздо больше удобств для API-клиента.Есть ли какое-либо решение в отношении преобразования времени байта в нагрузку без указания опции javaagent в командной строке java
Ожидается, что он не будет выполнять конфигурацию как для основных приложений Java, так и для приложений Java EE, но в действительности я использую команду java -javaagent: $ {path} /Lifecycle.jar, чтобы включить собственный класс ClassFileTransformer в классе время загрузки.
После некоторых поисков были обнаружены некоторые неясные направления. Мне нужен Java Guy для обобщения и руководства.
- agentmain против premain
Интеграция с заданной среды выполнения, такие как ByteCodePreprocessor GlassFish, который имеет следующий метод для выполнения преобразования байт-код:
public byte[] preprocess(String classname, byte[] classBytes);
Мои неурядицы о эти направления:
- Для основного приложения Java кажется, что мы можем изменить основной метод класса запуска для адаптации решения agentmain. Есть ли другие варианты?
- Для использования контейнера JavaEE, такого как Glassfish, я могу использовать ByteCodePreprocessor для изменения класса байтового кода, но мне нужно создать несколько новых классов, но я не знаю, где хранить эти новые файлы классов или как проектировать или применить новый ClassLoader для загрузки вновь созданных файлов классов во время предварительной обработки файла класса.
(BTW Lifecycle API будет следовать мета-управляемый стиль, который очень близок с JPA без интерфейса EntityManager, и большинство из них является только аннотаций и CallbackContext интерфейс и интерфейс LifecycleEvent на данный момент.)
Хотя вы уже отметили ответ как решение, вы можете взглянуть на [javassist] (http://www.csg.ci.iu-tokyo.ac.jp/~chiba/javassist/), который в основном обеспечивает манипулирование байтами класса и встраивание дополнительных инструкций Java в классы, конструкторы и методы. Чтобы увидеть это в действии, вы можете взглянуть на [простую схему плагинов] (https://github.com/RovoMe/PluginApplication/blob/master/PluginFramework/PluginCore/src/main/java/at/rovo/core/ classloader/InjectionLoaderStrategyDecorator.java) Я написал для университетского курса. –