2016-02-02 19 views
7

Sono attualmente in procinto di aggiungere Spring e Hibernate a un'applicazione esistente, ma dopo aver letto un sacco di tutorial ci sono ancora un paio (alias un sacco di cose) che sembrano strani a me o mi manca qualcosa ...Spring - Tutorial vs Real Life

Tutte le esercitazioni che ho trovato sono semplici (come dovrebbe essere la maggior parte dei tutorial), come visto su Esempio A, un controller per gestire le richieste (JSP o WS) e autorizzare la classe manager per interagire con il DB.

Nel mio caso questo non si applica, poiché l'applicazione ha una classe per gestire le richieste, quindi istanzia una classe gestore, che a sua volta crea una nuova classe per gestire qualcos'altro che crea una nuova classe da gestire (....) * e quindi gestisce la connessione al database come visto su Esempio B.

Spring diagram - Tutorial vs Real life

mia domanda è come posso fare il mio logica Business Class n"Springable", cioè, in grado di fare un gestore di database autowired all'interno di esso?

Da tutti gli esempi che ho visto, mi è venuta in mente queste alternative:

  1. Creare l'autowire a ALL la DBManager interno del regolatore, e quindi CIO di tutto il business Classi fino a raggiungere la classe Business Logic n. Questo avrebbe seguito con gli standard di primavera, ma implicherebbe la maggior parte del codice di refactoring
  2. Transform TUTTI le classi Business Logic in fagioli
  3. Aggiungere SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (questo); alla classe Business Logic n e utilizzare il @Autowire per accedere al DBManager

mi sto perdendo qualcosa o c'è qualche altra alternativa?

+1

Dal mio punto di vista, l'approccio migliore (o corretto) sarebbe l'alternativa 2. Trasformare tutte le classi di accesso di logica e dati aziendali in bean di primavera ('@ Service' e' Repository') e invece di creare le istanze nel codice, configurare la molla per iniettare questi fagioli ovunque sia necessario. Potresti voler usare il tag 'component-scan', invece che il verbose XML, per far conoscere e gestire in anticipo questi bean. –

risposta

1

Questa è solo la mia opinione, ma potreste essere interessati.

La filosofia di base di Spring, il fatto che la creazione e la configurazione di oggetti coinvolti nel contenitore, ma non negli oggetti business, è nota come IoC o Iniezione di dipendenza. In base alla configurazione, il contenitore crea e associa (inietta) gli oggetti tra loro. Ciò consente di rimuovere il codice delle classi di business relative alla creazione di istanze e alla configurazione (questo codice può essere piuttosto complesso). Così le tue lezioni diventeranno più semplici e pulite, e potranno concentrarsi sulla logica di business e nient'altro.

Credo che gli oggetti business non abbiano bisogno di creare l'altro. Lascia che sia Spring a farlo. Lo fa perfettamente.

Basta marcare il classi logica di business, dipendono il suo ruolo, con uno stereotipo: @Component, @Service, @Controller (significato di stereotipi è possibile trovare here), e iniettare con @Autowired. E se hai bisogno di Database Manager in questa classe, iniettalo nello stesso modo.

Quindi, la mia scelta corrisponde al punto numero due: "2. trasformare tutte le classi Business Logic in fagioli ..."