Поля
Stati c и внедрение stati c в целом являются антишаблоном, так как они составляют глобальное общее состояние и создают зависимости порядка и иногда проблемы с безопасностью потоков. (Трудно обеспечить, чтобы вызывающие абоненты никогда не вызывали метод buildApiUrl
до того, как произойдет внедрение stati c.) Это особенно верно, если вы планируете использовать метод установки non -stati c для установите это поле stati c, поскольку это означает, что вызов сеттера для одного экземпляра будет также неявно изменять каждый другой экземпляр. Это сбивает с толку API; клиенты будут делать предположения, основанные на общепринятой практике, и не заметят, что их предположения неверны, если они действительно не изучат код.
Основная причина, по которой стоит рассмотреть использование поля stati c, заключается в том, что если у вас есть устаревший код это не интегрировано со структурой внедрения зависимостей. В подобной ситуации вам может понадобиться обойти несоответствие, создав одноэлементные адаптеры, которые перенаправляют вызовы от методов stati c к бинам с зависимостями. Но вам захочется сделать как можно меньше из этого; лучше перенести устаревший код для использования внедрения зависимостей, когда это возможно, чем для переноса устаревшего кода для использования неуклюжих адаптеров stati c вокруг внедрения зависимостей.