Printemps 3.0.5 ne pas évaluer @Valeur de l'annotation de propriétés
Essayer à l'auto-fil propriétés d'un bean dans Printemps 3.0.5.COMMUNIQUÉ de, je suis en utilisant:
-
config.properties
:username=myusername
-
main-components.xml
:<context:property-placeholder location="classpath:config.properties" />
-
Maclasse:
@Service public class MyClass { @Value("${username}") private String username; ... }
Comme un résultat, le nom d'utilisateur est défini pour littéralement "${username}"
, donc l'expression n'obtient pas analysée. Mon autre auto-filaire dépendances sur cette classe, se mettre, et le Printemps ne lance pas d'exception. J'ai aussi essayé d'ajouter @Autowired
mais il n'a pas aidé.
Si je analyser les propriétés d'un bean et utiliser @Autowired
+ @Qualifier
, il travaille:
<bean id="username" class="java.lang.String">
<constructor-arg value="${username}"/>
</bean>
Toute idées sur la façon d'utiliser @Value
? Peut-être que j'ai besoin d'inclure du Printemps de dépendance que je n'ai pas? Merci
- Êtes-vous sûr que vous avez
<context:property-placeholder>
dans le même contexte de l'application comme votreMyClass
bean (pas dans le contexte parent)? - Vous avez raison. J'ai déménagé <contexte:propriété de l'espace réservé> à partir du contexte défini par ContextLoaderListener de servlet contexte. Maintenant, mes valeurs d'obtenir analysée. Merci beaucoup!
- tout à fait une chose utile à faire ici est de mettre en ignore-insolubles-des espaces réservés à de faux ainsi, l'application échoue si elle ne peut pas résoudre les détenteurs de place - qui est ce que votre problème a été
- Trouvé cette réponse après de nombreuses heures à me demander pourquoi mon @Valeur les annotations n'ont pas de travail 🙁 Comme indiqué dans le d'autres post BeanPostProcessor n'est pas partagé à travers les contenants, même dans la même hiérarchie
- Vous pouvez @Autowire Environnement, puis de l'environnement.getProperty("nom"). Voir stackoverflow.com/a/15562319/632293
Vous devez vous connecter pour publier un commentaire.
Trouvé ce que le problème a été. Copier/coller des commentaires:
Êtes-vous sûr que vous avez
<context:property-placeholder>
dans le même contexte de l'application comme votre MyClass bean (pas dans le contexte parent)? – axtavtVous avez raison. J'ai déménagé
<context:property-placeholder>
du contexte défini par lesContextLoaderListener
à la servlet contexte. Maintenant, mes valeurs d'obtenir analysée. Merci beaucoup! - alex