Mit dieser Klasse
@Component
public class Sample {
@Value("${my.name}")
public static String name;
}
Wenn ich es versuche Sample.name
, ist es immer 'null'. Also habe ich es versucht.
public class Sample {
public static String name;
@PostConstruct
public void init(){
name = privateName;
}
@Value("${my.name}")
private String privateName;
public String getPrivateName() {
return privateName;
}
public void setPrivateName(String privateName) {
this.privateName = privateName;
}
}
Dieser Code funktioniert. Sample.name
ist richtig eingestellt. Ist das ein guter Weg oder nicht? Wenn nicht, gibt es einen besseren Weg? Und wie geht das?
spring
code-injection
Whiteship
quelle
quelle
Antworten:
Vor allem
public static
nichtfinal
sind Felder Übel . Die Feder erlaubt aus einem bestimmten Grund keine Injektion in solche Felder.Ihre Problemumgehung ist gültig, Sie brauchen nicht einmal Getter / Setter,
private
Feld ist genug. Versuchen Sie dies auf der anderen Seite:(arbeitet mit
@Autowired
/@Resource
). Aber um Ihnen einige konstruktive Ratschläge zu geben: Erstellen Sie eine zweite Klasse mitprivate
Feld und Getter anstelle vonpublic static
Feld.quelle
Spring verwendet die Abhängigkeitsinjektion, um den spezifischen Wert zu füllen, wenn die Annotation @Value gefunden wird. Anstatt den Wert an die Instanzvariable zu übergeben, wird er stattdessen an den impliziten Setter übergeben. Dieser Setter verarbeitet dann die Grundgesamtheit unseres NAME_STATIC-Werts.
quelle