Was ist das Prinzip von Spring Aop?
Frühlings-AOP-Prinzip: 1. AOP ist aspektorientiert und ein Programmierparadigma, das eine andere Perspektive zur Betrachtung der Programmstruktur zur Verbesserung der objektorientierten Programmierung OOP bietet. 2. AOP bietet Entwicklern eine Möglichkeit, übergreifende Anliegen zu beschreiben. Mechanismen und können übergreifende Anliegen automatisch in objektorientierte Softwaresysteme einbinden.
Frühlings-Aop-Prinzip:
AOP (aspektorientiert) ist ein Programmierparadigma, das eine andere Perspektive zur Betrachtung der Programmstruktur bietet, um die objektorientierte Programmierung (OOP) zu verbessern.
AOP bietet Entwicklern einen Mechanismus zur Beschreibung übergreifender Anliegen und kann übergreifende Anliegen automatisch in objektorientierte Softwaresysteme einbinden, wodurch eine Modularisierung übergreifender Anliegen erreicht wird.
AOP kann Logik oder Verantwortlichkeiten kapseln, die nichts mit dem Geschäft zu tun haben, aber üblicherweise von Geschäftsmodulen wie Transaktionsverarbeitung, Protokollverwaltung, Berechtigungskontrolle usw. aufgerufen werden, um die Reduzierung von doppeltem Code im System zu erleichtern Kopplung zwischen Modulen und erleichtern die zukünftige Bedienbarkeit und Wartbarkeit. Vorteile der Verwendung von AOP
JoinPoint: Kreuzungspunkte- Schneidprobleme müssen in das Programm eingefügt werden. Die Verbindungspunkte können in der Klasseninitialisierung, dem Methodenaufruf, dem Feldaufruf oder der Ausnahmebehandlung usw. liegen. In Spring werden nur Verbindungspunkte zur Methodenausführung unterstützt.- Pointcut: eine Reihe verwandter Verbindungspunkte.
- Hinweis: Ein an einem Verbindungspunkt ausgeführtes Verhalten bietet eine Möglichkeit, das vorhandene Verhalten in AOP an dem vom Einstiegspunkt ausgewählten Verbindungspunkt zu erweitern. Einschließlich Pre-Enhancement (vor der Beratung), Post-Enhancement (nach der Beratung) und Surround-Enhancement (um die Beratung herum).
- Aspekt: Die Kombination aus Benachrichtigungen und Einstiegspunkten.
- Proxy: Wenden Sie Aspekte über einen Proxy auf das Zielobjekt an. AOP-Proxys können mithilfe dynamischer JDK-Proxys oder CGLIB-Proxys implementiert werden.
- Ziel: Das Objekt, das in den Fokus gewoben werden muss. Das heißt, das Objekt, das als Proxy fungiert.
- Das wichtigste Entwurfsmuster zur Implementierung von AOP ist der dynamische Proxy.
- In Spring gibt es zwei Arten von dynamischen Proxys: Der eine ist der dynamische JDK-Proxy und der andere der dynamische cglib-Proxy.
Dynamische JDK-Proxy-Simulation
Die beiden Kernschnittstellen (Klassen) des dynamischen JDK-Proxys sind InvocationHandler und Proxy. Hinweis: Es können nur Proxy-Schnittstellen verwendet werden. Die public class TimeHandler implements InvocationHandler { // 目标对象 private Object targetObject; public TimeHandler(Object targetObject){ this.targetObject = targetObject; } @Override //关联的这个实现类的方法被调用时将被执行 /*InvocationHandler接口的方法,proxy表示代理,method表示原对象被调用的方法, args表示方法的参数*/ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object ret=null; try{ System.out.println("方法之前:"+System.currentTimeMillis()); //调用目标方法 ret=method.invoke(targetObject, args); System.out.println("方法之后:"+System.currentTimeMillis()); }catch(Exception e){ e.printStackTrace(); System.out.println("error"); throw e; } return ret; } }
Nach dem Login kopierenTimeHandler-Klasse implementiert die InvocationHandler-Schnittstelle. Implementieren Sie die Kernmethode invoke, die über drei Parameter verfügt. Der erste Parameter ist die generierte Proxy-Klasseninstanz, der zweite Parameter ist die Methode des Zielobjekts und der dritte Parameter ist das Parameterwert-Array der Methode.
public class ProxyUtil { @SuppressWarnings("unchecked") public static <T> T proxyOne(ClassLoader loader,Class<?>[] clz,InvocationHandler handler){ return (T)Proxy.newProxyInstance(loader, clz, handler); } }
Nach dem Login kopierenDie Klasse ProxyUtil kapselt einfach die Methode Proxy.newProxyInstance(). Diese Methode hat auch 3 Parameter. Der erste Parameter generiert den Klassenlader des Proxy-Objekts, der zweite Parameter ist das Schnittstellenarray des Zielobjekts und der dritte Parameter ist die Klasseninstanz, die die InvocationHandler-Schnittstelle implementiert. public interface UserManager { public void addUser(String userId, String userName); } public class UserManagerImpl implements UserManager { @Override public void addUser(String userId, String userName) { System.out.println("addUser(id:"+userId+",name:"+userName+")"); } } public static void main(String[] args) { UserManager um=new UserManagerImpl(); LogHandler log =new LogHandler(um); um=ProxyUtil.proxyOne(um.getClass().getClassLoader(), um.getClass().getInterfaces(), log); TimeHandler time = new TimeHandler(um); um=ProxyUtil.proxyOne(um.getClass().getClassLoader(), um.getClass().getInterfaces(), time); um.addUser("1111", "张三"); }
Nach dem Login kopierenZu Demonstrationszwecken wird hier ein LogHandler hinzugefügt, der mit dem TimeHandler-Code identisch ist.
Dynamische CGLIB-Proxy-Simulation
Die beiden Kernschnittstellen (Klassen) des dynamischen CGLIB-Proxys sind MethodInterceptor und Enhancer. Ist es dem dynamischen JDK-Proxy sehr ähnlich und seine Verwendung ist ähnlich? Aber CGLIB kann Klassen und Schnittstellen vertreten. Hinweis: Abschlussklassen können nicht als Proxy verwendet werden. Die
public class TimeInterceptor implements MethodInterceptor { private Object target; public TimeInterceptor(Object target) { this.target = target; } @Override public Object intercept(Object proxy, Method method, Object[] args, MethodProxy invocation) throws Throwable { System.out.println("方法之前:"+System.currentTimeMillis()); Object ret = invocation.invoke(target, args); System.out.println("方法之后:"+System.currentTimeMillis()); return ret; } }
public class ProxyUtil { @SuppressWarnings("unchecked") public static <T> T proxyOne(Class<?> clz,MethodInterceptor interceptor){ return (T)Enhancer.create(clz, interceptor); } }
public class UserManage { public void addUser(String userId, String userName) { System.out.println("addUser(id:"+userId+",name:"+userName+")"); } } public static void main(String[] args) { UserManage um = new UserManage(); TimeInterceptor time = new TimeInterceptor(um); um = ProxyUtil.proxyOne(um.getClass(), time); um.addUser("111", "老王"); }
Java Basic Tutorial
Das obige ist der detaillierte Inhalt vonWas ist das Prinzip von Spring Aop?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Javas Nashorn Engine ermöglicht JavaScript Scripting in Java -Apps. Zu den wichtigsten Schritten gehören das Einrichten von Nashorn, das Verwalten von Skripten und die Optimierung der Leistung. Hauptfragen beinhalten Sicherheit, Speicherverwaltung und zukünftige Kompatibilität aufgrund von Nashorns Deprecus

Javas Try-with-Ressources vereinfacht das Ressourcenmanagement, indem Ressourcen wie Dateiströme oder Datenbankverbindungen automatisch geschlossen werden und die Code-Lesbarkeit und -wartbarkeit verbessert werden.

In dem Artikel werden die Java Virtual Machine (JVM) erörtert, in der die Rolle bei der Ausführung von Java -Programmen auf verschiedenen Plattformen aufgeführt ist. Es erläutert die internen Prozesse, Schlüsselkomponenten, das Speichermanagement, die Müllsammlung und das Leistungsoptimizatio des JVM

In dem Artikel werden verschiedene Algorithmen für Java -Müllsammlungen (seriell, parallel, CMS, G1, ZGC), deren Leistungsauswirkungen und Eignung für Anwendungen mit großen Haufen erörtert.

Java Enum repräsentieren feste Wertesätze und bieten durch benutzerdefinierte Methoden und Konstruktoren Typensicherheit, Lesbarkeit und zusätzliche Funktionalität. Sie verbessern die Codeorganisation und können in Switch -Anweisungen zur effizienten Wertschreibung verwendet werden.
