Spring AOP è una delle parti essenziali della struttura della molla. Nella fase di base, il framework primaverile è basato su IoC e AOP. Nel corso ufficiale di primavera è presente una diapositiva in cui è indicato:
L'AOP è una delle parti più importanti del framework.
Il punto chiave per capire il funzionamento AOP in primavera è che quando si scrive un aspetto con la Primavera ci strumento quadro con la costruzione di un proxy per gli oggetti, con un JDKDynamicProxy
se il bean implementa un'interfaccia o tramite CGLIB se il tuo bean non implementa alcuna interfaccia. Ricorda che devi avere cglib 2.2 nel percorso della tua classe se usi Spring prima della versione 3.2. A partire dalla primavera 3.2 è inutile perché cglib 2.2 è stato incluso nel core.
Il framework alla creazione del bean creerà un proxy che avvolge gli oggetti e aggiunge preoccupazioni trasversali quali la sicurezza, la gestione delle transazioni, la registrazione e così via.
La creazione proxy in questo modo verrà applicata a partire da un'espressione pointcut che funge da framework per decidere quali bean e metodi verranno creati come proxy. Il consiglio sarà più la responsabilità che per il tuo codice. Ricorda che in questo processo il pointcut acquisisce solo metodi pubblici che non sono dichiarati definitivi.
Ora, mentre in Primavera AOP la trama degli Aspetti verrà eseguita dal contenitore all'avvio del contenitore, in AspectJ è necessario eseguire questa operazione con una compilazione del codice tramite la modifica del bytecode. Per questo motivo, a mio parere, l'approccio Spring è più semplice e più gestibile di AspectJ.
D'altra parte, con Spring AOP non è possibile utilizzare tutta la potenza di AOP perché l'implementazione avviene tramite proxy e non con la modifica del codice.
Come in AspectJ, è possibile utilizzare la tessitura a tempo di caricamento in SpringAOP. È possibile beneficiare di questa funzionalità in primavera è implementato con un agente e configurazioni speciali, @EnabledLoadWeaving
o in XML. Puoi usare lo spazio dei nomi come esempio. Tuttavia in Spring AOP non è possibile intercettare tutti i casi. Ad esempio, il comando new
non è supportato in Spring AOP.
Tuttavia in Spring AOP è possibile beneficiare dell'utilizzo di AspectJ mediante l'uso del metodo di produzione aspectof
nel bean di configurazione Spring.
Per il motivo che Spring AOP è fondamentalmente un proxy creato dal contenitore, quindi è possibile utilizzare AOP solo per i bean spring. Mentre con AspectJ puoi usare l'aspetto in tutti i tuoi fagioli. Un altro punto di confronto è il debug e la prevedibilità del comportamento del codice. Con Spring AOP, il lavoro è preformato tutto dal compilatore Java e gli aspetti sono un modo molto interessante per creare proxy per il bean Spring. In AspectJ se modifichi il codice, hai bisogno di più compilazione e di capire dove i tuoi aspetti sono intrecciati potrebbe essere difficile. Anche chiudere la tessitura in primavera è più semplice: con la molla rimuovi l'aspetto dalla tua configurazione, riavvia e funziona. In AspectJ devi ricompilare il codice!
Nella tessitura a tempo di caricamento, AspectJ è più flessibile di Spring perché Spring non supporta tutte le opzioni di AspectJ. Ma a mio parere Se si desidera modificare il processo di creazione di un bean, un modo migliore è gestire l'accesso personalizzato in una fabbrica e non con la tessitura a carico del tempo di un aspetto che modifica il comportamento del nuovo operatore.
Spero che questa panoramica di AspectJ e Spring AOP ti aiuta a capire la differenza delle due pozioni
Quando alcune annotazioni esistono in primavera ma esistono anche in Java, cosa dovresti usare? Giava. La stessa logica si applica a questa funzionalità. La primavera è primavera qui oggi è andato domani. (Remeber persone hanno usato Struts un po 'prima di primavera). AspectJ è la soluzione preferita a lungo termine. Supererà la primavera. Non licenzio Spring, dico solo, per questo aspetto ...: -; – inor