Есть ли способ включить переплетение времени загрузки в AspectJ без передачи аргументов агента Java в JVM?

У меня есть требование использовать плетение времени загрузки в AspectJ в весеннем приложении, из того, что я вижу в разных источниках, вам нужно передать аргумент javaagent вашей JVM для включения плетения времени загрузки.

i.e.

-javaagent:path/to/spring-aop-aspectj-ltw/spring-instrument-4.2.5.RELEASE.jar
-javaagent:path/to/spring-aop-aspectj-ltw/aspectjweaver-1.8.8.jar

Мне интересно, есть ли альтернативный способ инициализировать это в приложениях Spring?

P.S. Я использую Gradle для сборки проекта.


person Sagar Verma    schedule 26.05.2020    source источник
comment
Не могли бы вы объяснить, в чем проблема с добавлением этих параметров командной строки? Вы должны постоянно указывать параметры, специфичные для проекта, например. путь к классу (даже если вы можете не заметить, потому что Gradle, Maven или ваша IDE делают это за вас, определенные системные свойства, чтобы включить определенные параметры и т. д. Просто правильно настройте инструмент сборки, и он сделает это автоматически за вас.   -  person kriegaex    schedule 27.05.2020
comment
Это потребовало бы изменений в сценарии развертывания во всех приложениях, которые мы запускаем в производственной среде. Сначала я объясню свою постановку проблемы, у меня есть требование создать толстый JAR для выполнения определенной задачи, это также требует вызова определенных аспектов в случае вызова объекта (который не управляется Spring). Если другое приложение использует этот JAR-файл, им сначала потребуется внести изменения в сценарии развертывания, что ускорит процесс интеграции.   -  person Sagar Verma    schedule 27.05.2020
comment
Таким образом, допустимо внесение изменений в конфигурации всех приложений, использующих ваш JAR, но не внесение изменений в сценарии развертывания. Я правильно тебя понимаю?   -  person kriegaex    schedule 27.05.2020


Ответы (2)


Используйте следующее в аннотированном классе @Configuration.

@EnableLoadTimeWeaving(aspectjWeaving=ENABLED)
person zlaval    schedule 26.05.2020
comment
Я боюсь, но это не позволит ткать время загрузки, я уже пробовал это, но пока аспекты не вызываются - person Sagar Verma; 27.05.2020

Думаю, нет. Вам нужны агенты, чтобы фактически облегчить плетение, прежде чем любой из ваших классов приложения будет загружен, поскольку их нужно переписать. Я думаю, что конфигурация @EnableLoadtimeWeaving просто указывает CGLIB не создавать прокси-классы для вашего аннотированного кода, потому что в этом больше нет необходимости. Но я не уверен на 100% в последней части. с тем же успехом он мог бы сказать агентам, что нужно на самом деле сплести код, когда они найдут его во время сканирования пути к классам.

И не забудьте настроить файл aop.xml в каталоге META-INF!

person godsim    schedule 28.05.2020