heute zu finden, fanden wir dieses Muster in unserem Code:Stateful Singletons Bohnen
class Foo {
private List<String> errors;
public void addError(String error) { ... }
public List<String> getErrors();
}
Während der Code zu funktionieren scheint, ist dies ein Singleton Spring-Bean und es ist in mehreren unabhängigen Stellen und die Verbraucher der Bohne injiziert gehe davon aus, dass sie ihre eigene Fehlerliste haben. Dies führt zu subtilen Fehlern.
Die offensichtliche Lösung ist es, Entwickler zu erziehen diese Art von Fehlern zu vermeiden, aber ich frage mich, ob es ein statisches oder Runtime-Code-Analyse-Tool ist, die diese Art von Fehlern finden können.
Zum Beispiel könnte ein Bean-Postprozessor die Bean vor der Rückgabe analysieren und nach privaten Feldern suchen, die nicht @Autowired
sind.
Können wir @postConstruct verwenden, um dieses private Feld zurückzusetzen? – sreeprasad
@SREEPRASADGOVINDANKUTTY: Sie könnten versuchen, aber es würde nicht funktionieren, da '@ PostConstruct' würde nur einmal aufgerufen werden, wenn Foo zu schaffen. Sie können '@ PostConstruct' in Bean A nicht verwenden, um das Feld zurückzusetzen, da dies auch die Liste für Bean B löschen würde. –
Obwohl es nicht eine sehr saubere Art und Weise, können Sie Feder APO versuchen, fügen Sie afterAdvice und in dieser Methode können Sie diese Felder überprüfen. –