Non conosco il significato di utilizzare il proxy in primavera. cos'è efficiente?Qual è il significato dell'utilizzo del proxy (proxy dinamico) nel framework di primavera?
risposta
Il dynamic proxy è una funzionalità del JDK. Può essere utilizzato per implementare un'interfaccia utilizzando an invocation handler.
Una classe proxy dinamico (indicato semplicemente come una classe proxy sotto) è una classe che implementa un elenco di interfacce specificate in runtime quando la classe è creato, con il comportamento descritti seguito. Un'interfaccia proxy è un'interfaccia di tipo implementata da una classe proxy . Un'istanza proxy è un'istanza di una classe proxy. Ogni istanza del proxy ha un oggetto di gestione di richiamo associato, che implementa l'interfaccia InvocationHandler.
Un proxy dinamico ha un sovraccarico. Per la maggior parte dei casi d'uso, tuttavia, il sovraccarico non sarà significativo. Il vero problema è che l'uso (eccessivo) dei proxy dinamici rende più difficile la comprensione e il debug dell'applicazione. Ad esempio un proxy dinamico verrà visualizzato con linee multiple in uno stacktrace.
I proxy dinamici vengono spesso utilizzati per implementare decorators. Un esempio di questo è AOP in primavera. (Non voglio entrare nei dettagli di AOP e non userò la terminologia AOP per mantenere le cose semplici). Dove alcune preoccupazioni sono implementate in una classe e utilizzate in molti posti. I proxy dinamici (e i gestori di invocazione) sono solo il codice della colla (fornito da Spring) per intercettare le chiamate al metodo. (In realtà, i proxy dinamici sono solo un dettaglio di implementazione di questa funzionalità. Generare le classi al volo è un'altra possibilità per implementarlo.)
Perché lo implementiamo? Voglio chiedere della metologia o delle stesse cose – Linh
I proxy sono utilizzati da AOP. In breve:
Normalmente.
Caller --> Real object
Ma quando, per esempio, si desidera la gestione delle transazioni automatica, la primavera mette un proxy del vostro oggetto reale
Caller --> Proxy --> Real object
in cui il proxy inizia la transazione.
Here is nice article spiegare sia l'essenza del proxy e la loro efficienza (performance) in primavera
Bozho, è una spiegazione molto bella. – lwpro2
domanda successiva: perché la primavera ha bisogno di usare a? Conosco solo l'annotazione @Transaction – gstackoverflow
Molte altre cose. Caching, per esempio. Registrazione. Sentiero di controllo. O qualunque altra cosa tu possa sviluppare da solo – Bozho
Possiamo aggiungere una funzionalità di classe Java modificando il codice sorgente/byte o utilizzando sottoclasse o un proxy che incorpora la funzionalità aggiuntive e delega le chiamate all'oggetto sottostante.
AOP può anche utilizzare i proxy CGLIB. Questo è usato per il proxy delle classi invece delle interfacce.
Le altre risposte sono buone, ma ecco come ci penso in termini molto semplici.
- Un'annotazione significa "aggiungi codice nascosto per comportamento aggiuntivo".
- Il framework (o chissà cosa significhi l'annotazione) aggiunge bytecode, Spring in fase di esecuzione, AspectJ in fase di compilazione, ad esempio.
- Aggiunge codice come proxy insieme a un intercettore. (Un wrapper, decoratore, adattatore sono simili e potrebbero essere più facili da capire di "proxy".)
- Quando il programma viene eseguito, l'intercettore invia l'esecuzione al proxy che fa la sua cosa, che quindi può o non può inviare l'esecuzione a la classe che hai codificato e che "avvolge".
cosa intendi "che cosa è efficiente?" – skaffman