Если вы хотите обнаружить его во время компиляции, конструктор должен быть закрытым.
Приватное, вероятно, слишком строгое (оно заставляет инструменты анализа кода предполагать, что его никогда не вызовут, и может даже вызывать предупреждения в некоторых IDE), я бы сказал, что по умолчанию (без модификатора, защищенного пакета) лучше. В тех случаях, когда вы хотите разрешить подклассы в других пакетах (но это невозможно без вызова конструктора непосредственно из этого подкласса), вы можете сделать его защищенным.
Обязательно прокомментируйте конструктор соответствующим образом, чтобы всем, кто читает код, было понятно, почему конструктор такой.
Spring будет вызывать этот закрытый конструктор без каких-либо проблем (начиная с Spring 1.1, SPR-174 ).
Вопрос о том, разрешает ли это что-либо еще вызывать ваш конструктор, идея заставить каждого пользователя класса использовать инъекцию зависимостей Spring (так что вся цель этого вопроса) является хорошей идеей или нет, является целым другое дело.
Если это в библиотеке / фреймворке (то есть , обычно используется с Spring), ограничение использования может быть не очень хорошей идеей. Но если вы знаете, что классы будут использоваться только в вашем закрытом проекте, который уже заставляет использовать Spring, это может иметь смысл.
В качестве альтернативы, если ваша настоящая цель состоит просто в том, чтобы избежать возможности того, что кто-то создаст экземпляр и не инициализирует его своими зависимостями, вы можете просто использовать конструктор внедрения зависимостей.
И если ваша цель состоит только в том, чтобы предотвратить случайное использование конструктора (разработчики не знают, что класс должен быть инициализирован Spring), но не хотите полностью ограничивать возможности, вы может сделать его закрытым, но также добавить статический метод фабрики (с явным именем, например createManuallyInitializedInstance или что-то в этом роде).
Плохая идея. Другая возможная альтернатива - сделать конструктор общедоступным, но не рекомендуется. Таким образом, его все еще можно использовать (не прибегая к взломам, таким как использование отражения), но любое случайное использование выдаст предупреждение. Но это не совсем чисто: это не то, для чего предназначен амортизация.