2016-04-10 21 views
4

Ich versuche, Vorteil @Value Annotation zu nutzen und meine String-Variable aus der Eigenschaftendatei automatisch zu füllen, aber ohne Glück. Werte werden nicht festgelegt und sind null.java - Spring @Value Annotation gibt null zurück

Hier ist meine Konfiguration:

SendMessageController.java

@RestController 
public class SendMessageController { 

    @Value("${client.keystore.type}") 
    private static String keystoreType; 

    @RequestMapping(value = "/sendMessage", method = RequestMethod.POST) 
    public ResponseEntity<SendMessageResponse> sendMessage(@Validated @RequestBody SendMessageRequest messageRequest) { 
    ....... 
    } 

application.properties

client.keystore.type=JKS 

rest-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 


    <context:component-scan base-package="org.example.controllers" /> 

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

    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 
    <mvc:annotation-driven /> 

</beans> 

Wenn ich meine Anwendung ausführen und versuchen keystoreType Variable es immer null ist zuzugreifen. Was mache ich falsch?

+0

Können Sie bitte den Import stellen Sie sicher, Anweisung für '@ Value' Annotation ist' import org.springframework.beans.factory.annotation.Value; '? –

+0

Der Frühling verarbeitet "statisch" nichts. Warum ist dein Feld "statisch"? – Savior

+0

Okay, nachdem die Variable nicht statisch gemacht wurde, funktioniert alles gut. Vielen Dank. – Oleg

Antwort

7

Die Feder kann @Value nicht direkt in ein statisches Feld injizieren.

können Sie entweder fügen Sie den Wert durch eine kommentierte Setter wie diese injizieren:

private static String keystoreType; 

@Value("${client.keystore.type}") 
public void setKeystoreType(String keystoreType) { 
    SendMessageController.keystoreType = keystoreType; 
} 

oder zu ändern:

@Value("${client.keystore.type}") 
    private static String keystoreType; 

zu:

@Value("${client.keystore.type}") 
private String keystoreType; 
+0

danke für Ihre Erklärung, das hat das Problem gelöst – Oleg

+0

@Oleg Sie willkommen, können Sie es als Antwort markieren? –

+0

sicher! Warten auf die Zeitüberschreitung :) – Oleg

Verwandte Themen