2016-02-04 2 views
0

Я расширяю приложение с помощью немного AOP. Он выполняет поиск данных из базы данных и сопоставление их с объектом. Это занимает около 7-8 секунд для 10.000 записей. Однако, просто добавляя AOP только с одним аспектом, это займет около 50 секунд. Производительность приложения очень важна, и до сих пор я не мог придумать какие-либо идеи о том, как сделать это быстрее. Я предполагаю, что создание прокси замедляет его.Tune/Speed ​​up Spring AOP

Дополнительная информация

Объект для каждой записи помечается рамки @Scope(scopeName=ConfigurableBeanFactory.SCOPE_PROTOTYPE) и извлекаются из контекста приложения E object = appCtx.getBean(clazz.getName(), clazz); перед заполнением его. Заполнение осуществляется с помощью отражений и рекурсивного метода.

Аспект, просто зарегистрирован для всех сеттеров некоторого определенного класса и его подклассов execution(public void <package>.<Class>+.set*(..)) и АОП включается через @EnableAspectJAutoProxy

+1

Ну, для каждого сеттера теперь вы вдруг выполняете дополнительную логику, а получение компонента из контекста более тяжелое, чем 'new Class()'. Таким образом, в итоге все дополнительные миллисекунды будут складываться. Не для одного, но для 10000 записей он будет складываться. –

+0

Мне известно о том, что он будет замедляться со всеми этими дополнительными вещами, но в 6-7 раз? Я имею в виду, что дополнительная аспектная логика даже не выполняется во время создания объекта. Я заполняю объект непосредственно на поле через отражение. Загрузка и создание объектов из/через контекст приложения также не так уж плоха. Это примерно 7-8 секунд, если я удаляю только '@ Aspect'. Любые идеи о том, как его настроить? – RaHe

+1

Нет, поскольку вы не сможете многое сделать. Вы получаете прокси, прокси означает накладные расходы. Независимо от факта отражения, если есть вызов метода, ему необходимо проверить разрез точки, если ti необходимо применить. Если вы хотите, чтобы более высокая скорость использовала загрузку или время компиляции вместо прокси. –

ответ

0

Использование AspectJ вместо Spring AOP сделал трюк. Теперь у меня есть функциональность AOP без каких-либо существенных потерь производительности.