Сначала простой ответ: используйте эти рамки осторожно, не каждый и не слишком много.
Вы правы в своем предположении, что генерация байт-кода обычно связана с обходом языковых ограничений, например внедрение зависимости. Устранение этих ограничений предоставляет мощные инструменты (spring, guice, hibernate), но когда дело доходит до этого, это уже не чистая Java (все еще чистая JVM), и, таким образом, имеет немного волшебства.
Пока вы используете только один из этих инструментов, вы, вероятно, можете не заглядывать слишком глубоко внутрь. Но если вы начнете смешивать их, вам нужно понять их немного больше.
Единственным вспомогательным фактором является предыдущее использование; если другие люди успешно интегрировали больше этих фреймворков и задокументировали это, вам, возможно, не стоит заглядывать слишком глубоко.
Если вы хотите использовать какой-либо инструмент, спросите себя:
- Что я получу?
- Работает ли он с другими моими инструментами?
- Могу ли я использовать более простой инструмент?
Каждый раз, когда вы добавляете инструмент, вы добавляете сложность. Каждый раз, когда вы добавляете сложный инструмент (например, с генерацией байт-кода), вы умножаете сложность.
Примеры:
на работе используем пружину + спящий режим.
Это улучшение по сравнению с EJB (
в игрушечном проекте я использую Guice. Это делает возможным разделение, но требует, чтобы каждый пользователь моих библиотек использовал Guice. По этой причине я могу через Guice.