2014-04-28 10 views
50

definieren ich folgendes in einem Spring-Bean haben:Wie @Value als optionale

@Value("${myValue}") 
private String value; 

Der Wert korrekt eingespritzt wird. Die Variable muss jedoch optional sein. Sie wird als Befehlszeilenparameter übergeben (der dann mithilfe einer SimpleCommandLinePropertySource zum Spring-Kontext hinzugefügt wird), und dieses Argument wird nicht immer vorhanden sein.

Ich habe versucht, die beide folgend, um einen Standardwert zur Verfügung zu stellen:

@Value("${myValue:}") 
@Value("${myValue:DEFAULT}") 

aber in jedem Fall das Standardargument nach dem Doppelpunkt selbst injiziert wird, wenn ein Istwert - das erscheint, was außer Kraft setzen Der Frühling sollte spritzen.

Was ist die korrekte Art zu spezifizieren, dass @Value nicht erforderlich ist?

Dank

+0

Das ist sehr seltsam ... der Standardwert sollte nur als Standardwert fungieren (d. H. Wenn die Eigenschaft nicht definiert ist). Können Sie Ihre Aussage überprüfen, dass "der Standardwert selbst dann injiziert wird, wenn ein tatsächlicher Wert vorhanden ist" (z. B. wenn es keine alte kompilierte Klasse gibt)? –

+4

'@Value (" $ {some.prop:} ")' funktioniert für mich. Das ist die einzige Annotation für diese Variable. – Zarathustra

+0

Können Sie Ihre Anwendungskonfiguration posten? –

Antwort

91

Was ist der richtige Weg, um festzulegen, dass @Value erforderlich ist, nicht wahr?

auf der Annahme arbeiten, dass die von ‚nicht erforderlich‘ meinen Sie null dann ...

Sie haben richtig bemerkt, dass Sie : Charakter einen Standardwert rechts von einem versorgen kann. Ihr Beispiel war @Value("${myValue:DEFAULT}").

Sie sind nicht auf einfache Zeichenfolgen als Standardwerte beschränkt. Sie können SPEL Ausdrücke, und ein einfacher SPEL Ausdruck null zurückzukehren verwenden ist:

@Value("${myValue:#{null}}") 
1

Wenn Sie mit Java 8, können Sie die Vorteile seiner java.util.Optional Klasse nehmen. Sie müssen nur die Variable im Anschluss an diese Art und Weise erklären:

@Value("${myValue:#{null}}") 
private Optional<String> value; 

Dann können Sie prüfen, ob der Wert definiert ist oder nicht in einem schöneren Weg:

if (optional.isPresent()) { 
    // do something cool 
} 

Hoffe, es hilft!

Verwandte Themen