Spring - Confusione sulla configurazione?

9

Da qualche parte leggo Spring offre convenienza sulla configurazione. Ma la gente di Spring sta apportando così tante modifiche alla configurazione, che ora mi sto davvero confondendo per usare la configurazione xml o l'annotazione.

Vorrei che qualcuno suggerisse una metodologia infallibile o una regola empirica nell'uso di xml e annotazioni.

Esempi di SO per dimostrare che molti principianti come me si confondono con la configurazione.

  • link-1

    I don't seem to grasp the functionality behind <context:annotation-config> and <context:component-scan>.

    From what I've read they seem to handle different annotations (@Required, @Autowired etc vs @Component, @Repository, @Service etc) but also from what I've read they register the same bean post processor classes.

    To confuse me even more, there is an annotation-config attribute on <context:component-scan>...

  • link 2

    I still have the component scan tag:

    <context:component-scan base-package="com.mycompany.maventestwebapp" />
    

    but I have also another tag (that look like have similar task), this one:

    <annotation-driven />
    

    What is the difference between these two tags? An other "strange" thing is that the previous example (that don't use the annotation-driven tag) is very similar to the project create by STS using the Spring MVC Template project but if I delete the annotation-driven tag from its configuration file the project don't run and give me the following error: HTTP Status 404 -...

Spring 3.2 non ha più bisogno di cglib per il proxy, ma le versioni più basse usano cglib. Una citazione dal blog di Springource

In order to generate such proxies, Spring uses a third party library called cglib. Unfortunately, this project is not active anymore. In Spring 3.2, it is very likely that Spring will be using Javassist instead by default.

Sono sufficienti a suggerire che Spring is Confusion over configuration?

    
posta Community 10.04.2013 - 11:04
fonte

4 risposte

5

La primavera ha lo scopo di fornire una struttura in cui vi è una "convenzione sulla configurazione". Tuttavia, la realtà è che le applicazioni Spring hanno bisogno di una certa quantità di configurazione.

Nella primavera 2.5.xe versioni precedenti, l'idioma comune era di fornire questa configurazione via XML. Con Spring 3.0+, il modo più idiomatico è usare le annotazioni (qualcosa che anche Java EE6 / 7 incoraggia).

Come nota a margine, può essere divertente (rattristarsi?) vedere un'entità JPA annotata, è piuttosto facile aggiungere 4+ annotazioni a un singolo campo ....

    
risposta data 10.04.2013 - 12:05
fonte
0
<annotation-driven />

Devi specificare lo schema XML da dove proviene.

Molto probabilmente è nel contesto della strategia di gestione delle transazioni JPA quando si definisce il gestore delle transazioni (si veda 9.5.6 Utilizzo di @Transactional nei documenti di Spring)

Quando si definisce la gestione della transazione basata sull'annotazione - Spring AOP crea automaticamente aspetti per il proprio metodo di iniziare (o verificare la presenza) prima del richiamo di un metodo e poi commit (o rollback in caso di eccezione) dopo il metodo ivokation è finito.

    
risposta data 18.04.2013 - 10:39
fonte
0

Ho trovato che la creazione di IoC / Bean basata su annotazioni è utile quando si ha un'implementazione singleton, ma potrebbe essere necessario sostituirla.

In contrasto con una situazione in cui potrebbe essere necessario riutilizzare un bean ripetutamente con diverse classi / istanze dipendenti.

In questi casi dichiaro il bean in config e di solito faccio l'iniezione del costruttore di qualunque dipendenza di cui ho bisogno. Quindi, nella classe che userà detto bean (s) I @Autowire e poi @Qualifier("") - è così che le fabbriche dovrebbero funzionare.

Un singleton è un metodo factory che restituisce solo 1 risultato. Quando questo non si applica facilmente è quando devi mescolarlo.

Per quanto riguarda l'uso di Scansione componenti vs. non ciò è realmente soggetto ai criteri sopra riportati e al buon senso. In genere sono molto esplicito riguardo alla scansione dei componenti del pacchetto. In questo modo posso creare un contesto applicativo diverso per testare dove posso prendere in giro le dipendenze esterne (come un db) mentre sto ancora testando il resto della mia configurazione IoC.

Inoltre, non aggiungo @Component a nessun codice di libreria nel mio progetto. Non si sa mai quando / come sarà necessario utilizzare un bean e se si @Component esso, si potrebbe accidentalmente raccoglierlo in una scansione e si limita la sua riusabilità. Per questi casi generalmente ho definito un contesto applicativo nella libreria con alcuni pratici valori predefiniti di dichiarazione del bean che il mio progetto principale PUO includere nelle importazioni nel suo contesto applicativo.

Nessuna religione qui. Solo esperienze da trasmettere

    
risposta data 23.04.2013 - 20:27
fonte
0

Opzioni di offerte di primavera, in origine c'era solo il cablaggio basato su xml. È stato aggiunto il cablaggio basato sull'annotazione successiva.
Ora è possibile (e molte persone lo fanno) utilizzare un mix di entrambi.
C'è un'ampia documentazione inclusa con Spring e / o scaricabile dal sito di Spring Source. C'è un allenamento professionale (mai fatto, non posso garantire per questo), e alcuni buoni libri (mi piace APress 'Pro Spring, scegli la versione giusta per la versione di Spring che stai impiegando).

    
risposta data 25.04.2013 - 09:10
fonte

Leggi altre domande sui tag