62 votes

Printemps @Valeur de l'annotation @Controller classe n'évaluant pas de valeur à l'intérieur du fichier de propriétés

Je suis nouveau printemps et en essayant d'injecter une chaîne avec une valeur à l'aide de @Valeur("${loginpage.message}") annotation à l'intérieur d'un contrôleur de annotée avec @Contrôleur d'annotation et de la valeur de ma chaîne est en cours d'évaluation comme la chaîne "${loginpage.message}" et non pas ce qui est à l'intérieur de mon fichier de propriétés.

Ci-dessous mon contrôleur avec la chaîne "message" que je veux injecter.

@Controller
public class LoginController extends BaseController {
    @Value("${loginpage.message}")
    private String message;

    @RequestMapping("/")
    public String goToLoginPage(Model model) {
        model.addAttribute("message", message);

        return "/login";
    }
}

Mon contexte de l'application ressemble à ceci:

<context:property-placeholder location="classpath:properties/application.properties" />

<context:annotation-config />

<context:component-scan base-package="com.me.application" />

Mon fichier de propriétés a la ligne:

loginpage.message=this is a test message

Le printemps doit être la cueillette jusqu'à la valeur à un certain point, car à chaque fois que je change @Valeur("${loginpage.message}") à une valeur non pas dans le fichier de propriétés comme @Valeur("${notInPropertiesFile}"), j'obtiens une exception. Merci à l'avance.

68voto

Boris Treukhov Points 5564

Il semble que la question a déjà été posée Printemps 3.0.5 ne pas évaluer @Valeur de l'annotation de propriétés

La différence entre l'application web de la racine et de la servlet application des contextes est l'une des principales sources de confusion au Printemps, voir la différence entre applicationContext et spring-servlet.xml au printemps

D' @Value javadoc :

Notez que le traitement réel de la @de la Valeur de l'annotation est réalisée par un BeanPostProcessor

De Printemps de la documentation:

BeanPostProcessor interfaces sont définies par conteneur. Ce n'est pertinente que si vous utilisez le conteneur des hiérarchies. Si vous définissez un BeanPostProcessor dans un conteneur, il ne fait son travail sur les grains dans le conteneur. Les haricots qui sont définies dans un conteneur ne sont pas post-traitées par un BeanPostProcessor dans un autre récipient, même si les deux conteneurs font partie de la même hiérarchie.

8voto

Oui, je vais avoir le même problème avec le Printemps les 3. Il ne semble pas fonctionner à l'intérieur de Contrôleurs. Pour résoudre le problème j'ai créé un autre bean avec @Service et injecté dans le contrôleur. Il a fait un travail pour moi. Espérons que cela serait utile à quelqu'un que j'ai passé toute la journée à le comprendre.

0voto

Tim Points 16

Chris réponse devrait le travail s'assurer que le fichier de propriétés est dans le cadre du projet de chemin de classe et si c'est pour être à l'extérieur de la guerre, puis dans le contexte de l'application des propriétés de l'espace réservé doit être utilisé. Il devrait fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X