Meilleure pratique pour l'utilisation des propriétés du système Java
Notre code utilise beaucoup de propriétés par exemple, 'java.io.tmpdir', 'utilisateur.maison', 'utilisateur.nom' etc. Nous n'avons pas toutes les constantes définies pour ces n'importe où (et ni ne java je crois) ou de toute autre malin pour traiter avec eux de sorte qu'ils sont en texte clair parsemé tout au long du code.
String tempFolderPath = System.getProperty("java.io.tmpdir");
Comment tout le monde en utilisant les propriétés du système?
source d'informationauteur willcodejavaforfood
Vous devez vous connecter pour publier un commentaire.
Je traiter cela comme n'importe quel autre constante de Chaîne que vous avez dispersés tout au long de votre code et de définir une constante variable. Accordé, dans ce cas, "la java.io.tmpdir" est peu susceptible de changer, mais on ne sait jamais. (Je ne veux pas dire que le Soleil est de modifier le sens de "java.io.tmpdir", ou quel système de propriété il points de, mais de ce que vous pourriez changer d'avis sur ce système de propriété que vous devez lire.)
Si vous êtes seulement en utilisant une propriété particulière au sein d'une classe, alors que j'avais définir les constantes droit dans cette classe.
Si vous utilisez les mêmes propriétés dans des classes différentes, vous pouvez définir une classe statique de votre propre pour tenir les constantes que vous utilisez le plus souvent.
Alors, partout où vous avez besoin pour utiliser cette constante viens de l'appeler à l'aide
si vous l'utilisez dans de multiples endroits, il pourrait être une bonne idée d'écrire une classe pour encapsuler la lecture de la propriété et peut-être d'autres propriétés.
alors peut-être quelque chose comme: Configuration.getTemporaryDirectory()
Je pense que dans un orientée objet, un logiciel, vous avez probablement un objet (ou une méthode) qui ont une dépendance sur un répertoire où un travail qui doit être fait. Vous pouvez donc mettre en évidence cette dépendance sur le constructeur ou la méthode.
Après, si vous avez besoin d'un défaut pour le répertoire par défaut et venir à partir d'un système de propriété, vous pouvez simplement créer une usine de méthode ou d'un constructeur/méthode avec moins de paramètres de passer à l'autre costrunctor/méthode un:
Vous n'avez pas besoin de créer une "dépendance aimant" seul à contenir un paramètre de configuration.
SystemUtils fourni par Apache Commons Lang paquet, résout ce problème.
SystemUtils a défini constante pour la plupart des propriétés du système, qui peut être obtenu par une recherche, par exemple:
Probablement, c'est une manière plus propre de le faire.
Depuis la question du titre est extrêmement large, je vais le jeter dans une autre bonne pratique, vous devriez considérer lors de l'utilisation des propriétés du système. L'accès aux propriétés du système peut par refusée par le
SecurityManager
de sorte que vous devrez peut-être l'accès par le biais d'unPrivilegedAction
, comme ceci:Utiliser une action privilégiée lorsque votre code contraint un sensibles à l'action de sorte qu'il sera en sécurité même si le code malveillant invoque.
Par exemple, il serait dangereux d'utiliser une action privilégiée dans une méthode comme
OutputStream open(File file)
. Code non fiable pu l'invoquer, et l'utilisation de votre code de privilèges d'écrire n'importe quoi, n'importe où.Cependant, si vous aviez une méthode qui a sauvé les préférences de l'utilisateur de votre application dans un fichier que vous choisissez, ce serait probablement en sécurité. Un malveillant de l'appelant ne peut pas choisir l'emplacement du fichier ou de son contenu; ceux-ci sont spécifiés par votre code. Donc, votre méthode peut utiliser une action privilégiée pour lui permettre d'être invoquées par les non-privilégiés code.
Je voudrais traiter comme tout autre constante, sans doute avec un
P_
ouPROP_
préfixe, et les mettre dans une des constantes de la classe.Si vous utilisez beaucoup d'entre eux, j'irais même jusqu'à envisager de diviser pour
PropertyNames
constantes de classe:Enfin, je songe sérieusement à namespacing les noms de propriété eux-mêmes, avec le standard de nom de domaine inverse utilisée pour les paquets. C'est juste pour éviter des affrontements avec les tiers propriétés des consommateurs.
En Java, les Chaînes sont immuables, ce qui signifie que le même objet dans l'espace mémoire n'est pas remplacé; une nouvelle Chaîne est créé à chaque fois. Le plus haut voté suggestion est d'utiliser une constante:
Malheureusement, la constante utilisée pour la propriété réelle de la clé. Cela signifie que chaque fois que vous faites cet appel, vous allez créer un nouvel objet String pour stocker la valeur. À mon avis, vous devriez faire de la constante le résultat de l'appel lui-même: