2015-07-25 11 views
6

Penso che la mia comprensione dei fagioli primaverili sia un po 'spenta.È vantaggioso creare un bean Spring quando posso accedere all'unico metodo statico direttamente con il nome della classe

Stavo lavorando al mio progetto e stavo pensando a questa situazione.

Dire che ho classe Foo

class Foo(){ 
    public void doSomething(Object a , Object b){ // input parameters does not matter actually. 
     //do something 
    } 
} 

Se sto usando questa classe in un'altra classe come:

class Scheduler{ 
    .... 
@Autowired 
private Foo foo; 

someMethod(){ 
    foo.doSomeThind(a,b); 
} 
    .... 
} 

Nel caso invece di autowiring del Foo sopra, posso fare doSomeThing statica e utilizzare direttamente Foo.doSomeThing(a,b)

Mi stavo chiedendo se ci fosse qualche vantaggio nel creare un bean o se c'è qualche svantaggio nell'usare metodi statici come questo?

Se sono uguali, Quando dovrei andare per fagioli primaverili e quando dovrei usare semplicemente un metodo statico?

+0

Se 'Foo' non ha nessuno stato e contiene solo metodi' static', è più di una classe di utilità. Inutile dire che questo è un bean 'Spring' dato che non è possibile scambiare le implementazioni se un' class' ha solo metodi 'static'. – CKing

risposta

1

I metodi nei fagioli Spring possono beneficiare dell'iniezione di dipendenza mentre i metodi statici non possono. Quindi, un candidato ideale per il metodo statico è quello che fa le cose più o meno indipendentemente e non ha mai pensato di aver bisogno di altre dipendenze (diciamo un DAO o servizio)

2

I metodi statici sono ok per le piccole funzioni di utilità. La limitazione del codice statico è che non è possibile modificare il suo comportamento senza modificare il codice stesso.

La molla, d'altra parte, offre flessibilità.

  1. IoC. Le tue classi non conoscono l'esatta implementazione delle loro dipendenze, si basano semplicemente sull'API definita dall'interfaccia. Tutte le connessioni sono specificate nella configurazione, che può essere diversa per produzione/test/altro.

  2. Potenza di metaprogrammazione. Puoi cambiare il comportamento dei tuoi metodi semplicemente marcandoli (tramite annotazioni di in xml). Pertanto, è possibile includere il metodo nelle transazioni, renderlo asincrono o pianificato, aggiungere interceptor AOP personalizzati, ecc.

  3. Spring può utilizzare lo strumento POJO per renderlo un endpoint per il servizio Web remoto/RPC.

http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/

1

Le persone usano primavera non a causa di alcune future specifiche stretti che non possono essere sostituiti da classi statiche o DI o qualsiasi altra cosa. Le persone usano Spring a causa di caratteristiche e idee più astratte che forniscono fuori dalla scatola. Ecco una bella citazione da Someone`s blog:

Di seguito sono riportati alcuni dei principali vantaggi offerti dal framework Spring:

  • Primavera Attiva POJO programmazione. Spring consente ai programmatori di sviluppare applicazioni di classe enterprise utilizzando POJO. Con Spring, puoi scegliere i tuoi servizi e il tuo quadro di persistenza.Si programma in POJO e si aggiungono servizi enterprise con i file di configurazione. Costruisci il tuo programma da POJOs e lo configura, e il resto è nascosto a te.
  • Spring fornisce una migliore leva. Con Spring, è possibile eseguire più lavoro con ogni riga di codice. Codice in un modo più veloce e mantenere di meno. Non c'è elaborazione delle transazioni. Spring ti consente di creare un codice di configurazione per gestirlo. Non è necessario chiudere la sessione per gestire le risorse. Non devi fare la configurazione da solo. Inoltre, sei libero di gestire le eccezioni nel posto più appropriato, non affrontando la necessità di gestirle a questo livello poiché le eccezioni sono deselezionate.
  • L'iniezione di dipendenza aiuta la testabilità. Spring migliora notevolmente la testabilità attraverso un modello di progettazione chiamato Dependency Injection (DI). DI consente di codificare una dipendenza di produzione e una dipendenza di test. Il test di un'applicazione Spring è facile perché tutto il relativo ambiente e codice dipendente viene spostato nel framework.
  • Inversion of Control semplifica JDBC. Le applicazioni JDBC sono piuttosto prolisse e richiedono tempo. Ciò che può aiutare è un buon livello di astrazione. Con Spring è possibile personalizzare un metodo JDBC predefinito con una query e una classe interna anonima per ridurre gran parte del duro lavoro.
  • Coerenza della molla. La primavera è una combinazione di idee in un insieme coerente, insieme a una visione architettonica generale per facilitare l'uso efficace, quindi è molto meglio usare Spring piuttosto che creare la propria soluzione equivalente.
  • Basato su tecnologie esistenti. Il framework primaverile si basa su tecnologie esistenti come framework di registrazione, framework ORM, Java EE, timer JDK, quarzo e altre tecnologie correlate.