2012-03-19 2 views
3

Хотя со ссылкой на «Pro Spring 2.5», я наткнулся на следующее утверждение (стр 193):Spring AOP: подтверждающие CGLIB прокси поведение

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

Я просмотрел исходный код Spring и попробовал несколько экспериментов, но не смог подтвердить это утверждение. Какую простую программу я могу написать, чтобы подтвердить ее?

ответ

0

Используйте VisualVM и профилируйте код, или выгрузите байт-код с помощью BCEL и просмотрите сборку. Для маршрута visualvm профилируйте код, сделайте снимок, проверьте трассировку стека метода.

+0

Чтобы получить трассировку стека, я сделал что-то проще. Я создал Throwable как в рекомендуемых, так и в не рекомендованных методах и распечатал трассировку стека. Но для обоих они были вызваны «Cglib2AopProxy $ DynamicAdvisedInterceptor.intercept», который, в свою очередь, создал объект CglibMethodInvocation и вызвал продолжение на нем. Так что из точки трассировки стека я не видел никакой разницы. Попробуем подход BCEL. – shrini1000

+0

Я попробовал это, используя BCEL's 'Repository.lookupClass (clazz)', где clazz - объект класса прокси CGLIB. Но я получил следующее исключение: Исключение в потоке «main» java.lang.ClassNotFoundException: SyntheticRepository не удалось загрузить foo.Foo $$ EnhancerByCGLIB $$ 42857850 – shrini1000

+0

Я знаю, что visualvm может видеть через прокси-серверы Spring AOP (мне пришлось профилировать их до), Я думаю, дайте это попробовать. –

Смежные вопросы