Должен ли я использовать 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/