Faire de Propriétés Java disponible dans l'ensemble de classes?
J'ai choisi de prendre un fichier de propriétés pour la personnalisation de certains paramètres.
J'utilise le code suivant pour faire un Objet de Propriétés disponibles dans une classe
Properties defaultProps = new Properties();
try {
FileInputStream in = new FileInputStream("custom.properties");
defaultProps.load(in);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
Dois-je ajouter à chaque classe? Probablement pas, car alors chaque classe serait d'ouvrir un flux de données de ce fichier.
Mais je ne suis pas sûr de savoir comment gérer cela correctement.
Je devrais faire une classe MyProperties
et de l'instancier dans quels que soient les besoins de la classe des propriétés?
Merci d'avance!
Liées réponse: stackoverflow.com/questions/4362911/...
OriginalL'auteur tzippy | 2011-01-20
Vous devez vous connecter pour publier un commentaire.
Une fois que vous avez initialisé
defaultProps
, vous pouvez rendre son contenu accessible à d'autres objets dans votre application, par exemple via un public statique méthode d'accesseur, par exemple:C'est l'approche la plus simple, mais il crée un supplément de dépendance qui fait l'unité de test plus difficile (sauf si vous fournissez une méthode dans
Config
pour définir un simulacre de l'objet de propriété pour les tests unitaires).Une alternative consiste à injecter
defaultProps
(ou les valeurs de configuration) dans chaque objet qui en a besoin. Toutefois, cela peut signifier que vous devez ajouter un paramètre supplémentaire(s) à beaucoup de méthodes si votre appel hiérarchies sont profondes.comment exactement est d'appliquer le pattern singleton plus flexible? N'êtes-vous pas le confondre avec l'abstrait modèle de fabrique?
comment un Singleton de la rendre plus souple? Notez que, pratiquement, c'est déjà un singleton (c'est un unique objet global, avec toutes ses dépendances, bagages), juste caché derrière une interface.
Eh bien, je considère qu'un singleton seulement un réel singleton quand il a été paresseusement chargé lors du premier accès. C'est aussi toute l'intention de le pattern singleton. Sinon il y a juste les moyens de "il suffit de créer un" modèle.
Afin d'éviter que votre problème de dépendance, d'envisager la mise en œuvre de l'injection de dépendance à l'aide d'une méthode de fabrique de modèle. Voir cette réponse pour un exemple stackoverflow.com/a/27724421/2048879
OriginalL'auteur Péter Török
Si vous avez seulement besoin d'une instance de votre classe de propriétés vous pouvez utiliser le le pattern singleton.
Il devrait ressembler à une classe comme ceci:
fixe (ce qu'une vieille réponse de la mienne !)
OriginalL'auteur SirDarius
Pourquoi ne pas utiliser un statique ResourceBundle ?
OriginalL'auteur fmucar
Il y a trop peu d'informations pour déterminer quelle est la meilleure façon de gérer cela pourrait être. Vous pouvez l'exposer à l'aide d'un accesseur, ou de la passer dans chaque classe qui en a besoin. Alternativement, vous pouvez retirer les biens que chaque les besoins de la classe et de transmettre leurs valeurs dans le constructeur de la classe.
OriginalL'auteur Kent Murra
Charger les propriétés à la fois à l'aide et de stocker les Propriétés somewheres que les autres classes peuvent tirer de. Si c'est un MyProperties classe qui fait référence à une variable statique, quelque part, c'est très bien.
OriginalL'auteur jzd
C'est un cas particulier de faire quelque chose de disponible à l'échelle mondiale. À l'aide de méthodes statiques est très mauvaise. Un mieux mais c'est une mauvaise solution est d'utiliser la sigleton modèle. Le test est le plus grand problème ici. À mon humble avis, la meilleure façon est d'utiliser L'injection de dépendance, même s'il est peut-être trop pour les petites applications.
OriginalL'auteur maaartinus
Puisque cette information est statique dans tous les cas, je recommande la mise en œuvre de la
Properties
classe comme un singleton. À l'aide de lastatic
l'initialisation du bloc méthode, vous pouvez charger le fichier automatiquement lorsque le programme démarre.Que vous allez encore besoin d'un stockage interne de mécanisme et d'accesseur mécanisme. Ceux-ci devraient également être marquée
static
.OriginalL'auteur Courtney Christensen
Plutôt que de charger les propriétés de chaque classe. Charger quelque part autour de main() et de le transmettre à d'autres classes via leurs constructeurs.
Ne pas les partager à l'échelle mondiale.
- Difficile à tester
- Contre l'abstraction (Global access, DAO pouvez accéder aux paramètres de l'utilisateur. il doit être évité en passant uniquement ce dont il a besoin.. pas tout)
- Les Classes de mensonge ce qu'ils ont besoin
OriginalL'auteur