Spring AOP: ‹context:load-time-weaver› против ‹aop:aspectj-autoproxy›

Я искал возможность профилировать свои API. Я обнаружил, что Spring AOP — это один из вариантов профилирования методов.

В Spring AOP есть два варианта настройки и использования аспектов:

  1. context:load-time-weaver
  2. aop:aspectj-autoproxy

Насколько я понимаю, первый вариант (load-time-weaver) выполняет переплетение во время загрузки без создания каких-либо прокси-объектов. И второй вариант (aspectj-autoproxy) создает прокси-объекты. Я прав в этом? Я считаю, что создание прокси-объектов может сказаться на производительности. не так ли?

Какой вариант лучше выбрать с учетом лучшей производительности? Каковы плюсы и минусы обоих подходов?


person Narendra Verma    schedule 07.05.2014    source источник


Ответы (1)


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

Что касается вашего вопроса: я не знаю, как настроить Spring, потому что я никогда его не использую. Я пользователь AspectJ. Однако я знаю, что Spring AOP всегда использует прокси-серверы (JDK или CGLIB, в зависимости от того, нужно ли вам проксировать интерфейсы или классы). Это, как вы сказали, то, что вам, вероятно, не нужно для профилирования. AspectJ, независимо от того, используете ли вы переплетение времени компиляции или загрузки, не нуждается и не использует прокси-серверы и, следовательно, должен быть быстрее. Если вы все равно еще не используете Spring в своем проекте, я бы не стал его трогать только для удовлетворения ваших потребностей в профилировании. Кроме того, Spring AOP работает только для Spring Beans и предлагает только перехват методов, не более того. AspectJ — это полноценная реализация АОП, гораздо более мощная. Если вы уже используете Spring, у вас есть выбор: использовать Spring AOP, AspectJ внутри Spring или их комбинацию.

person kriegaex    schedule 07.05.2014
comment
Спасибо Kriegaex за ваш ответ. Тем не менее, я не совсем понимаю точные различия между context:load-time-weaver и aop:aspectj-autoproxy. - person Narendra Verma; 12.05.2014
comment
Вы читали руководство? Насколько я понимаю, первый активирует ткачество во время загрузки AspectJ, а второй активирует автоматическое проксирование Spring-AOP для компонентов Spring, на которые нацелены pointcuts. Хотя можно использовать комбинацию обоих подходов для разных типов аспектов и целевых классов, я думаю, что в вашем случае было бы разумно выбрать только один из них. И я по-прежнему рекомендую AspectJ по причинам, упомянутым в моем ответе. - person kriegaex; 12.05.2014
comment
В этой статье от ребят из Spring сравнивается/сопоставляется переплетение во время загрузки с прокси: ="nofollow noreferrer">spring.io/blog/2007/07/19/ - person StvnBrkdll; 02.03.2016
comment
Парень в статье говорит, что я прав. Спасибо за это. - person kriegaex; 03.03.2016