Heim Java JavaBase Was ist das Prinzip von Spring Aop?

Was ist das Prinzip von Spring Aop?

Oct 30, 2020 pm 02:51 PM
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.

Was ist das Prinzip von Spring Aop?

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.

Weben: Beim Weben werden Aspekte auf das Zielobjekt angewendet, um ein AOP-Proxy-Objekt zu erstellen.

  • 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 kopieren

    TimeHandler-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 kopieren
  • Die 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 kopieren

    Zu 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 Was ist das Prinzip von Spring Aop?

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;
    }
}
Nach dem Login kopieren

intercept-Methode hat 4 Parameter. 1. Generierte Proxy-Klasseninstanz. 2. Referenziert durch die Methode des Proxy-Objekts. 3. Array von Methodenparameterwerten. 4. Die Proxy-Referenz der Proxy-Klasse auf die Methode.

public class ProxyUtil {
    @SuppressWarnings("unchecked")
    public static <T> T proxyOne(Class<?> clz,MethodInterceptor interceptor){
        return (T)Enhancer.create(clz, interceptor);
    }
    }
Nach dem Login kopieren

Die Enhancer-Klasse ist ein Bytecode-Enhancer in CGLib.

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", "老王");
    }
Nach dem Login kopieren
Verwandte kostenlose Lernempfehlungen:

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie benutze ich Javas Nashorn -Engine zum Scripting mit JavaScript? Wie benutze ich Javas Nashorn -Engine zum Scripting mit JavaScript? Mar 14, 2025 pm 05:00 PM

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

Wie benutze ich Javas Versuchserklärung für das automatische Ressourcenmanagement? Wie benutze ich Javas Versuchserklärung für das automatische Ressourcenmanagement? Mar 14, 2025 pm 04:59 PM

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.

Was ist die Java Virtual Machine (JVM) und wie funktioniert sie intern? Was ist die Java Virtual Machine (JVM) und wie funktioniert sie intern? Mar 14, 2025 pm 05:05 PM

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

Was sind verschiedene Algorithmen für die Müllsammlung in Java (seriell, parallel, CMS, G1, ZGC)? Was sind verschiedene Algorithmen für die Müllsammlung in Java (seriell, parallel, CMS, G1, ZGC)? Mar 14, 2025 pm 05:06 PM

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.

Wie benutze ich Javas Enums, um feste Wertesätze darzustellen? Wie benutze ich Javas Enums, um feste Wertesätze darzustellen? Mar 14, 2025 pm 04:57 PM

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.

See all articles