L'accès par programme aux biens créés par la propriété de l'espace réservé
Je suis en train de lire un fichier de propriétés à l'aide de context:property-placeholder
. Comment puis-je accéder par programmation (@Value
ne fonctionne pas - je ne sais pas de titres de propriété, au moment de l'élaboration)?
Le principal problème est que je ne peux pas changer applicationContext.xml
fichier parce que c'est sertie par "parent" cadre
ps. C'est étrange mais Environment.getProperty
retourne null
- Voir stackoverflow.com/questions/5172392/.... Il semble être possible depuis le printemps 3.
Vous devez vous connecter pour publier un commentaire.
Non vous ne pouvez pas.
PropertyPlaceholderConfigurer
est unBeanFactoryPostProcessor
, il n'est "vivant" au cours de haricot de la création. Lorsqu'il rencontre un${property}
notation, il tente de résoudre à l'encontre de ses propriétés internes, mais il ne fait pas de ces propriétés à la disposition du conteneur.Qui a dit: questions similaires ont comparu de nouveau et de nouveau, la solution proposée est généralement à la sous-classe
PropertyPlaceHolderConfigurer
et faire les Propriétés disponibles pour le contexte manuellement. Ou unPropertiesFactoryBean
annotation travaille sur de nouvelles versions de Printemps (testé sur v3.2.2)
Voici comment il est fait:
Carte votre fichier de propriétés de configuration spring fichier
Créer app-config.propriétés à l'intérieur (racine) de votre dossier source
Créer une classe contrôleur
Printemps automatiquement le contenu de mon.propriété à votre variable à l'intérieur du contrôleur de
La cartographie à une liste
La valeur de la propriété:
Classe de contrôleur de configuration:
Cartographie avancée
La valeur de la propriété:
Classe de contrôleur:
Failed to convert property value of type 'java.util.ArrayList' to required type 'java.util.List' for property 'messageProcessors'
Nous utilisons l'approche suivante pour accéder à des propriétés pour nos applications
Ensuite, vous avez le luxe de seulement permettra à l'autowiring propriétés dans les haricots à l'aide d'un qualificatif.
Si vous avez des propriétés plus complexes, vous pouvez toujours utiliser l'ignorer-ressources-pas-de trouver et d'ignorer-insolubles. Nous utilisons cette approche pour l'externalisation de certains de nos paramètres de l'application.
Le printemps succède à l'Inversion De Contrôle d'approche, ce qui signifie que nous pouvons simplement injecter propriété particulière dans POJO. Mais il ya certains cas, lorsque vous souhaitez accéder à la propriété donnée par nom directement à partir de votre code - certains pourraient voir comme anti-modèle - c'est très vrai, mais permet de se concentrer sur la manière de le faire.
La
PropertiesAccessor
ci-dessous permet d'accéder aux propriétés chargé parProperty Placeholder
et encapsule le conteneur de choses spécifiques. Il met également en cache propriétés à cause d'appel surAbstractBeanFactory#resolveEmbeddedValue(String)
n'est pas bon marché.Trouvé réponse à au-dessous du site:
http://forum.spring.io/forum/spring-projects/container/106180-programmatic-access-to-properties-defined-for-the-propertyplaceholderconfigurer
Créer des haricots pour vos propriétés avant de les mettre dans la propriété de l'espace réservé pour que les propriétés facile d'accès dans le code.
Ex:
Code:
Vous pouvez également utiliser @Resource(name="configProperties")
Ce retour de java.util.Les propriétés de l'objet
Dans du Code JAVA
Vous pouvez maintenant accéder ,
Cela fonctionne si vous avez besoin de numériser plusieurs emplacements pour vos propriétés ...
Puis dans vos classes réelles ...
Testé à l'aide de Printemps 5.1.4
Nous allons asume que vous avez le fichier de propriétés définies dans le "parent" cadre
Vous pouvez utiliser le @de la Valeur de l'annotation de cette façon: