Oggi, abbiamo trovato questo modello nel nostro codice:Trovare fagioli Singleton stateful
class Foo {
private List<String> errors;
public void addError(String error) { ... }
public List<String> getErrors();
}
Mentre il codice sembra funzionare, questo è un bean Spring Singleton ed è iniettato in più punti indipendenti e consumatori di fagiolo supponiamo che ognuno abbia la propria lista di errori. Quindi questo introduce bug sottili.
La soluzione ovvia è quella di educare gli sviluppatori ad evitare questo tipo di errore, ma mi chiedevo se c'è uno strumento di analisi del codice statico o di runtime che può trovare questo tipo di bug.
Ad esempio, un postprocessore di bean può analizzare il bean prima che venga restituito e cercare campi privati che non siano @Autowired
.
Possiamo usare @postConstruct per resettare quel campo privato? – sreeprasad
@SREEPRASADGOVINDANKUTTY: Si potrebbe provare ma non funzionerebbe poiché '@ PostConstruct' verrebbe chiamato una sola volta quando si crea Foo. Non è possibile utilizzare '@ PostConstruct' nel bean A per reimpostare il campo poiché ciò cancellerebbe anche l'elenco per il bean B. –
Anche se non è un modo molto pulito, è possibile provare l'APO di primavera, aggiungere dopo l'avviso e in tale metodo è possibile controllare questi campi. –