2014-01-18 5 views
11

Я не понял, когда я использовал System.setProperty для определения параметра, в котором хранятся данные?System.setProperty и System.getProperty

Если вы говорите, что я использовал System.setProperty в одном файле java, то могу ли я использовать свойства в любом месте? Но это не так, я не могу использовать его нигде, только в том же java-файле, который я назвал setProperty.

Я действительно не знаю, почему и какова функция этого метода.

+1

Это экземпляр JVM. –

+0

на экземпляр JVM? Аникет Тхакур, не могли бы вы рассказать мне больше? –

+1

Почему бы не прочитать [System javaadocs] (http://docs.oracle.com/javase/7/docs/api/java/lang/System.html) для 'getProperties' и' setProperties' и сделать немного от попыток ... – A4L

ответ

32

System класс имеет переменную типа static с именем реквизита, которая имеет тип Properties. Добавляя к этому, Properties является подтипом класса Hashtable. Все значения свойств хранятся в виде ключа и значения. Итак, datastore is Hashtable. Отвечая на другой вопрос, вы можете очень хорошо использовать метод System.getProperty(propertyKey) во всем своем приложении, поскольку это общедоступный статический метод. Вы не поняли, как работают Java-программы. Когда вы запускаете программу Java, вы фактически запускаете экземпляр JVM. Этот экземпляр будет иметь свои собственные свойства системы. Вот где вы должны положить свою собственность. Когда вы запускаете другую программу, у нее будут свои собственные свойства System. Итак, вы не можете ожидать, что свойство, которое вы установили в одном экземпляре JVM, будет доступно из другого экземпляра JVM! Вы можете получить доступ к System.getProperty(propertyKey) во всех классах, работающих в одном экземпляре JVM. Надеюсь, ты поймешь!

0

Данные хранятся в памяти до тех пор, пока ваш экземпляр JVM не работает. Это действительно не связано с файлом, который называется методами.

Как вы используете приложение? Является ли это веб-приложение, хранящееся в приложении? Можете ли вы опубликовать образец своего кода?

0

Я определяю два Java файл A.java и B.java

A.java так:

public static void main(String[] args) { 
     System.setProperty("system.project_name", "springsilkworm"); 
    } 

B.java как этот

public static void main(String[] args) { 
     System.out.println(System.getProperty("system.project_name")); 
    } 

Я бегу затем запустить B, я не могу получить свойство

Когда я использовал это в веб-приложении, я определил два контроллера, AController.java a й BController.java

AController.java так:

@RequestMapping(method = RequestMethod.GET) 
    public String printWelcome(ModelMap model) { 
     System.setProperty("system.project_name", "springsilkworm"); 
     model.addAttribute("message", "Spring 3 MVC Hello World"); 
     return "hello"; 

    } 

BController.java так:

@RequestMapping(method = RequestMethod.GET) 
    public String printWelcome(ModelMap model) { 
     System.out.println(System.getProperty("system.project_name")); 
     return "hello"; 

    } 

посещаю затем посетить B, в этой ситуации BController могут посетить систему. project_name property

Таким образом, я не могу понять область действия объекта по вызову System.setProperty

+1

Оба контроллера работают в одном экземпляре JVM. Вы можете получить доступ! – Keerthivasan

1

Если вы видите исходный код система класса он имеет следующий переменного класс

private static Properties props; 

As для свойств класса, вы можете думать о нем, как HashMap. Он фактически расширяет HashMap.

public class Properties extends Hashtable<Object,Object> 

Когда вы звоните

setProperty(String key, String value) 

он на самом деле делает

props.setProperty(key, value); 

Это только краткие (чеки менеджер безопасности также участвуют).

Теперь почему я сказал, что это экземпляр JVM?

При запуске Java-процесса создается отдельный экземпляр JVM, который запускает ваш процесс. Кроме того, поскольку реквизит является переменной класса (а не переменной экземпляра), только одна копия будет присутствовать в соответствующем экземпляре класса, который будет установлен при загрузке этого класса. Теперь это предполагает, что у вас нет каких-либо пользовательских загрузчиков классов, в этом случае поведение может быть другим. Но для упрощенного сценария вы System.setProperty() и System.getProperty() зададите свойства системы, к которым вы можете получить доступ через любой класс, выполняемый как часть этого java-процесса (JVM).

+0

Aniket Thakur также благодарит –

Смежные вопросы