J'essaie de charger un fichier de propriétés dans un bean Spring, puis d'injecter ce bean dans une classe.
La seule partie que je ne peux pas obtenir au travail semble être l'utilisation de la référence @ Resource. Quelqu'un peut-il connecter le dernier morceau pour moi? J'obtiens une valeur nulle à chaque fois. Ne semble pas vouloir injecter la valeur.
[EDIT] - Au départ, je pensais que l'utilisation de @ Resource était le meilleur moyen, mais la solution proposée que j'ai trouvée plus facile.
J'ai vu cette solution dans un autre article:
Lien vers la solution de référence: Inject Property Value into Spring - publié par DON
Merci à Don pour le message, mais je ne savais tout simplement pas comment le terminer avec le @ Resource.
Résultats du débogage: La valeur de la variable appProperties
est toujours nulle. Ce n'est pas injecté.
Spring Config.
Classe d'échantillon:
package test;
import Java.util.Properties;
import javax.annotation.Resource;
public class foo {
public foo() {}
@Resource private Java.util.Properties appProperties;
}
Basé sur les conseils de la solution approuvée ci-dessous. Voici les modifications que j'ai apportées.
Config printemps:
Classe Java:
Pour que votre solution fonctionne, vous devez également faire de foo un bean géré par Spring; car sinon, comment Spring saurait-il qu'il doit gérer l'une de vos annotations sur votre classe?
..class="foo"
component-scan
et spécifiez un package de base contenant votre classe foo
.Puisque je ne suis pas tout à fait sûr que ce soit exactement ce que vous voulez (ne voulez-vous pas qu'un fichier .properties soit analysé par Spring et qu'il ait sa clé -value paires disponibles au lieu d'un Properties
objet?), je vous propose une autre solution: Utiliser l'espace de noms util
<util:properties id="props" location="classpath:com/foo/bar/props.properties"/>
Et référencez les valeurs à l'intérieur de vos beans (doivent également être gérées par Spring):
@Value("#{props.foo}")
public void setFoo(String foo) {
this.foo = foo;
}
ÉDITER:
vient de réaliser que vous importez org.springframework.context.ApplicationContext
dans votre classe, ce qui est probablement inutile. Je vous encourage fortement à lire Spring reference au moins les premiers chapitres, car a) c'est une bonne lecture b) vous trouverez beaucoup plus facile de comprendre Spring si les bases sont claires.
Encore une solution utilisant l'espace réservé aux propriétés.
Le contexte printanier:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<context:component-scan base-package="your.packege" />
<context:property-placeholder location="classpath*:*.properties"/>
</beans>
La classe Java où vous voulez injecter des valeurs de propriétés:
public class ClassWithInjectedProperty {
@Value("${props.foo}")
private String foo;
}