Quando non usare Spring per istanziare un bean?

12

Sto cercando di capire quale sarebbe l'uso corretto di Spring. Non sintatticamente, ma in termini di scopo. Se si utilizza Spring, il codice Spring dovrebbe sostituire tutto il codice di istanza del bean? Quando usare o quando non usare Spring, per istanziare un bean?

Il seguente esempio di codice può aiutarti a capire il mio dilemma:

List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
    ClassA ca = new ClassA();
    ca.setName(name);
    caList.add(ca);
}

Se configuro Spring, diventa qualcosa del tipo:

List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
    ClassA ca = (ClassA)SomeContext.getBean(BeanLookupConstants.CLASS_A);
    ca.setName(name);
    caList.add(ca);
}

Personalmente ritengo che usare Spring qui sia un sovraccarico non necessario, perché

  1. Il codice è più semplice da leggere / capire.
  2. Non è davvero un buon posto per Dependency Injection perché non mi aspetto che ci sarà implementazione multipla / variata di ClassA , che mi piacerebbe che la libertà di sostituire usando la configurazione di Spring in un secondo momento.

Sto pensando correttamente? In caso contrario, dove sto andando male?

    
posta Rishabh 10.10.2012 - 14:16
fonte

4 risposte

14

Hai ragione, la primavera è inappropriata per il caso d'uso che hai elencato. Spring è meglio utilizzato per gestire dipendenze esterne (come il collegamento di una connessione JDBC in un DAO) o configurazioni (come specificare il tipo di database da utilizzare). Nel tuo esempio, se il tipo di bean fosse suscettibile di modifiche, dovresti utilizzare un'interfaccia per specificare il bean e creare un'istanza dei bean utilizzando una Factory. Useresti Spring per specificare quale factory usare e inserirli nella classe necessaria per creare un'istanza dei bean. Potresti quindi avere diverse fabbriche che hanno creato diversi tipi di fagioli (che supportavano tutte l'interfaccia bean) e ne configurano quella appropriata al momento dell'installazione (o dell'aggiornamento).

    
risposta data 10.10.2012 - 15:13
fonte
9

Vorrei usare Spring (o un altro sistema DI) tra livelli, l'istanziazione diretta all'interno dei livelli.
Quindi una classe che crea un bean che lascia l'ambito di quella classe, ad un sistema (funzionalmente) esterno, eventualmente definito da quel sistema o da qualche livello di comunicazione, verrebbe creato tramite DI. Un altro bean creato esclusivamente per uso interno all'interno del livello dell'applicazione viene creato direttamente, sia per motivi di chiarezza del codice che (in caso di grandi sistemi altrettanto importanti).

    
risposta data 10.10.2012 - 15:00
fonte
1

Se è un bean , dovresti lasciare che Spring lo costruisca (eccetto che puoi fornire un bean factory - l'ho usato dove dovevo restituire una sottoclasse specifica dipendente da una proprietà di sistema - e dovresti consultare la documentazione sulle annotazioni @Configuration e @Bean se lo stai facendo). Se non è un bean, ma piuttosto un Plain Old Java Object, non hai bisogno di usare Spring per farlo. I POJO sono utili, ma non otterranno l'iniezione di dipendenza, i wrapper AOP, ecc. In quanto sono le cose che Spring aggiunge per te.

La decisione fondamentale è se sia o meno un bean, o semplicemente un oggetto ordinario che segue alcune convenzioni bean (ad es. naming dei metodi). Non riesco a indovinare quale sia davvero il caso del piccolo esempio che hai dato.

    
risposta data 10.10.2012 - 15:58
fonte
0

Potrei essere sbagliato per correggere gli esperti.

L'intero concetto di bean nel contesto primaverile è che Spring Container si sta prendendo cura dell'oggetto. E 'la nascita del suo ciclo di vita morte ecc ... È come se fosse un custode dell'oggetto. L'applicazione che ne ha bisogno lo inietta.

Quindi, mentre prendi una decisione durante la progettazione del tuo modulo, pensa sempre se vuoi che il framework Spring si occupi o che sia un oggetto semplice il cui ciclo di vita è racchiuso in un metodo.

Come precedentemente suggerito gli oggetti dao jms accoda gli oggetti ecc. è pesante e meglio lasciare all'esperto che è il framework Spring a prendersi cura di esso.

    
risposta data 22.12.2017 - 01:42
fonte

Leggi altre domande sui tag