Это действительно зависит от контекста. Если вы пишете автономный Maths API, вы, возможно, захотите использовать статические фабрики, потому что код будет менее подробным, не требующим настройки и, возможно, более эффективным. Если вам нужно получить доступ / предоставить удаленную зависимость, поиск JNDI / LDAP или обмен сообщениями ESB будет работать хорошо. Для внедрения ваших служб / DAO / источников данных в ваш типичный код корпоративного сервера вам лучше использовать один из распространенных D.I. фреймворки, такие как Google Guice или Spring.
Не существует единого «лучшего» решения в разработке программного обеспечения; это всегда компромисс.