(Caveat: Я не программист на Java, я программист Perl. Perl не имеет формальных защит, и, возможно, поэтому я так хорошо понимаю проблему :))
Как вы думаете, это может увидеть только класс, в котором он был объявлен.
Может отображаться и использоваться только пакетом, в котором он был объявлен , Это значение по умолчанию в Java (которое некоторые считают ошибкой).
Пакет Private + можно увидеть подклассами или членами пакета.
Каждый может видеть это.
Видимый вне кода, который я контролирую. (Хотя это не синтаксис Java, это важно для этого обсуждения).
C ++ определяет дополнительный уровень, называемый «friend», и чем меньше вы знаете, тем лучше.
Когда вы должны использовать что? Вся идея заключается в инкапсуляции, чтобы скрыть информацию. Насколько это возможно, вы хотите скрыть детали того, как что-то делается от ваших пользователей. Зачем? Потому что тогда вы можете изменить их позже и не нарушать чей-то код. Это позволяет оптимизировать, реорганизовывать, реорганизовывать и исправлять ошибки, не опасаясь, что кто-то использует этот код, который вы только что пересмотрели.
Итак, эмпирическое правило - сделать вещи такими же видимыми, как и должно быть. Начните с частных и только добавьте больше видимости по мере необходимости. Публикуйте только то, что абсолютно необходимо знать пользователю, каждая деталь, которую вы делаете публичными судорогами, позволяет вам редизайн системы.
Если вы хотите, чтобы пользователи могли настраивать поведение, а не делать внутренние сообщения общедоступными поэтому они могут переопределить их, часто лучше перетащить эти кишки в объект и сделать этот интерфейс общедоступным. Таким образом, они могут просто подключить новый объект. Например, если вы пишете проигрыватель компакт-дисков и хотите, чтобы бит «идти найти информацию об этом компакт-диске» настраивался, а не публиковать эти методы, вы включили бы все эти функции в свой собственный объект и сделали бы свой объект getter / setter общедоступным , Таким образом, скупость о том, чтобы разоблачить ваши кишки, поощряет хороший состав и разделение проблем
Лично я придерживаюсь только «частных» и «публичных». У многих языков OO есть это. «Защищенный» может пригодиться, но это действительно чит. Когда интерфейс более чем частный, он находится вне вашего контроля, и вам нужно искать в коде других людей, чтобы найти его.
Здесь возникает идея «опубликования». Изменение интерфейса (рефакторинг он) требует, чтобы вы нашли весь код, который его использует, и измените это. Если интерфейс частный, то проблем нет. Если он защищен, вам нужно найти все ваши подклассы. Если это общедоступно, вам нужно найти весь код, который использует ваш код. Иногда это возможно, например, если вы работаете с корпоративным кодом, который используется только для внутреннего использования, не имеет значения, открыт ли интерфейс. Вы можете извлечь весь код из корпоративного репозитория. Но если интерфейс «опубликован», если есть код, использующий его вне вашего контроля, тогда вы будете закрыты. Вы должны поддерживать этот интерфейс или код нарушения риска. Даже защищенные интерфейсы можно считать опубликованными (поэтому я не беспокоюсь о защите).
Многие языки считают, что иерархический характер public / protected / private слишком ограничен и не соответствует действительности. С этой целью существует понятие класса trait , но это еще одно шоу.
Корень пути к классам - путь. Поместите свой файл в src / main / resources / auth.properties , затем установите resourcePath , используя realm.setResourcePath ("classpath: auth.properties");
Проверьте ExtendedPropertiesRealm и testapp для проверки гобеленов для примера
Попробуйте ServletContext.getResourceAsStream("/WEB-INF/auth.properties")
или ServletContext.getResourceAsStream("WEB-INF/auth.properties")
ServletContext должен использоваться из сервлета, servletListener и т. д.
Я нашел, что самый простой способ -
https://crunchify.com/java-properties-file-how-to-read-config-properties-values-in -java /
Попробуйте
Properties props = new Properties();
props.load(new FileInputStream(new File(req.getServletContext().getRealPath("/WEB-INF/fileName.properties"))));
System.out.println(props);