Должен ли я использовать CDI javax.inject.Singleton для bean-компонентов, которые не нуждаются в сериализации, прокси или декорациях

Я понимаю как ApplicationScoped и CDI javax.inject.Singleton работать, и я понимаю разницу между этими двумя областями. В моем приложении много компонентов, которые не нуждаются в сериализации, прокси или декорациях, поэтому я подумываю переключить их с ApplicationScoped (который работает), чтобы javax.inject.Singleton улучшить производительность, избегая прокси.

Мой вопрос: должен ли я на самом деле сделать такое изменение?

1 ответ

Решение

Конечно, вы можете сделать это рефакторингом для аннотации области, но вам нужно будет позаботиться о сериализации на bean-компонентах, вызывающих эти singleton-управляемые bean-компоненты. См. http://docs.jboss.org/weld/reference/latest-2.2/en-US/html_single/.

Сначала я бы выяснил, сколько выигрыша я получу от этого шага, и действительно ли оно того стоит, и мне нужно в него инвестировать. Обычно узкое место в производительности возникает из-за производительности запросов / индексации базы данных, ввода-вывода, сети, блокировок потоков, неэффективных алгоритмов (и других) перед издержками Java-прокси, поэтому я бы придерживался стандартного @ApplicationScoped.

Смотрите: http://ordinaryjava.blogspot.com/2008/08/benchmarking-cost-of-dynamic-proxies.html https://spring.io/blog/2007/07/19/debunking-myths-proxies-impact-performance/

Другие вопросы по тегам