2010-03-27 13 views
11

Quando si sposta alla primavera 2.5.x ho trovato che aggiunge più annotazioni stereotipo (in cima @Repository da 2,0): @Component, @Service e @Controller. Come li usate? Ti affidi al supporto implicito di Spring o definisci funzioni/aspetti/caratteristiche specifici dello stereotipo personalizzato? O è predominante per marcare i fagioli (tempo di compilazione, concettuale, ecc.)?Come si usano le annotazioni degli stereotipi in Spring 2.5.x?

+0

La semantica delle varie annotazioni degli stereotipi è documentata in javadoc. – skaffman

risposta

13

Le seguenti annotazioni stereotipo 2.5 possono essere utilizzati in applicazioni Spring MVC come alternativa al cablaggio dei fagioli in XML:

  • @Repository - per i fagioli DAO - permette di gettare DataAccessException quando la fonte dei dati non è disponibile.

  • @Service - per business bean - sono bean piuttosto semplici che hanno impostato alcune politiche di conservazione predefinite .

  • @Controller - per servlet - permette di impostare richiesta di pagina mappature, ecc

Inoltre, una quarta annotazione generica è stata introdotta: @Component. Tutte le annotazioni MVC sono specializzazioni di questo, e puoi anche usare @Component da solo, ma facendo questo in Spring MVC, non utilizzerai alcuna futura ottimizzazione/funzionalità aggiunta alle annotazioni di livello superiore. Puoi anche estendere @Component per creare i tuoi stereotipi personalizzati.

Ecco un rapido esempio delle annotazioni MVC in azione ... In primo luogo, l'oggetto di accesso ai dati:

@Repository 
public class DatabaseDAO { 
    @Autowired 
    private SimpleJdbcTemplate jdbcTemplate; 

    public List<String> getAllRecords() { 
     return jdbcTemplate.queryForObject("select record from my_table", List.class); 
    } 
} 

Il servizio:

@Service 
public class DataService { 
    @Autowired 
    private DatabaseDAO database; 

    public List<String> getDataAsList() { 
     List<String> out = database.getAllRecords(); 
     out.add("Create New..."); 
     return out; 
    } 
} 

E, infine, il controllore:

@Controller("/index.html") 
public class IndexController { 
    @Autowired 
    private DataService dataService; 

    @RequestMapping(method = RequestMethod.GET) 
    public String doGet(ModelMap modelMap) { 
     modelMap.put(dataService.getDataAsList()); 
     return "index"; 
    } 
} 

Ho trovato this article molto buono per dare una panoramica generale dello stereotipo anno tazioni, oltre allo official documentation.

+0

diresti che i nuovi (2.5) stereotipi si applicano solo a Spring MVC? – topchef

+0

Le tre annotazioni di alto livello potrebbero essere visualizzate come specifiche MVC.Potresti riutilizzarli per altri scopi, ma potresti perdere dei problemi di aggiornamento se vengono modificati nelle versioni future. @Component è l'annotazione di cablaggio del bean generico e potrebbe essere facilmente estesa e utilizzata al di fuori del dominio MVC. – seanhodges

0

Non dimenticate di aggiungere questo tag su XML

<context:component-scan base-package="com.example.beans"/> 
3

Le annotazioni non è MVC più specifica. Vedere lo reference documentation per ulteriori informazioni. Un esempio di utilizzo dell'annotazione @Component o di una sua specifica è il tcServer con il relativo supporto di monitoraggio. Vedi here per un esempio. Questo supporto per il monitoraggio viene aggiunto con la tessitura AspectJ in fase di caricamento.

Riepilogato, le annotazioni possono essere utilizzate in diverse impostazioni in fase di esecuzione dopo l'avvio del contenitore Spring o in fase di compilazione/caricamento con la tessitura AspectJ.

+0

Questo non è completamente vero. L'annotazione @Component non è specifica per MVC, ma gli altri elencati nella domanda dell'OP sono tutti specifici per MVC. – seanhodges

+0

seanhodges: No, @Repository, @Controller e @Service appartengono tutti al modulo org.springframework.context. @Endpoint che è anche una specializzazione di @Component è specifico per Spring WS ed è parte del modulo org.springframework.ws.java5. Un frammento della documentazione di riferimento di Spring 3 (non specifico MVC): In Spring 2.0 e versioni successive, l'annotazione @Repository è un marker per qualsiasi classe che soddisfa il ruolo o lo stereotipo (noto anche come Data Access Object o DAO) di un repository. Tra gli usi di questo marcatore c'è la traduzione automatica delle eccezioni. – Espen

Problemi correlati