


So implementieren Sie eine einfache Interceptor-Operation in Java über einen dynamischen Proxy
1. Proxy
Bevor wir dynamische Proxys zur Implementierung von Interceptoren verwenden, wollen wir zunächst kurz verstehen, was Java-Proxys sind.
Agent betreibt, wie der Name schon sagt, nicht direkt das Objekt, das als Proxy fungiert (im Folgenden als Zielobjekt bezeichnet, was komfortabler klingt), sondern verwendet indirekt die Methoden im Zielobjekt über einen Proxy Objekt. Agenten sind in zwei Modi unterteilt: einen statischen Agenten und einen dynamischen Agenten. Schreiben Sie als Nächstes ein Beispiel für einen statischen Proxy.
Ob es sich um einen statischen Proxy oder einen dynamischen Proxy handelt, das Zielobjekt (Ziel) muss eine Schnittstelle (Schnittstelle) implementieren. Beachten Sie, dass Sie diese nicht implementieren müssen, wenn Sie den von cglib bereitgestellten Proxy verwenden die Schnittstelle, aber verwenden Sie eine Unterklasse zur Implementierung, diese Methode wird vorerst nicht besprochen.
(1) Definieren Sie zunächst eine Schnittstelle
public interface IUserDao { void save(); }
(2) Definieren Sie das Zielobjekt (target)
public class UserDaoImpl implements IUserDao { public void save() { System.out.println("--------已经保存数据---------"); } }
(3) Definieren Sie das Proxy-Objekt #🎜 🎜#public class UserDaoProxy implements IUserDao {
private IUserDao target;//将目标对象放到代理对象中
public UserDaoProxy(IUserDao target){
this.target = target;
}
public void save() {
System.out.println("------开始事务------");
target.save();
System.out.println("-------提交事务------");
}
}
Nach dem Login kopieren
Testen Sie es:
public class UserDaoProxy implements IUserDao { private IUserDao target;//将目标对象放到代理对象中 public UserDaoProxy(IUserDao target){ this.target = target; } public void save() { System.out.println("------开始事务------"); target.save(); System.out.println("-------提交事务------"); } }
public class Test { public static void main(String[] args){ IUserDao userDao = new UserDaoImpl(); UserDaoProxy proxy = new UserDaoProxy(userDao); proxy.save();//通过代理对象调用save方法 } }
------Transaktion starten---- ---# 🎜🎜#--------Daten wurden gespeichert---------Ein Problem bei diesem Ansatz besteht darin, dass das Proxy-Objekt auch dieselbe Schnittstelle implementieren muss, die vom Proxy-Objekt implementiert wird, was zu einer ernsthaften Kopplung führt. Daher wird im Folgenden eine verbesserte Methode verwendet, nämlich der dynamische Proxy (JDK-Proxy).
-------Transaktion senden----- -
Die dynamische Proxy-Methode erfordert außerdem, dass das Zielobjekt (Ziel) eine Schnittstelle implementiert
(1) Definieren Sie eine Schnittstelle (IUserDao)
( 2) Definition einer Zielobjektklasse (UserDaoImpl)
(3) Erstellen Sie eine dynamische Proxy-Klasse
public class ProxyFactory { //维护一个目标对象 private Object target; public ProxyFactory(Object target) { this.target = target; } //给目标对象生成代理对象 public Object getProxyInstance() { System.out.println("----target class---" + target.getClass()); System.out.println("----target interfaces---" + target.getClass().getInterfaces()); return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("----开始事务2-----"); //执行目标对象方法 Object returnValue = method.invoke(target, args); System.out.println("----提交事务2----"); return returnValue; } }); } }
Testen Sie es:
public class Test { public static void main(String[] args) { //目标对象 IUserDao target = new UserDao(); System.out.println(target.getClass()); //给目标对象创建代理对象 IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance(); System.out.println("----proxy----:" + proxy.getClass()); proxy.save(); proxy.delete(); } }
Ausgabeergebnis:
class com.jd.pattern.proxy.dynamicProxy.UserDao----target class---class com.jd.pattern.proxy.dynamicProxy.UserDao# 🎜🎜#- ---target interfaces---[Ljava.lang.Class;@1fb3ebebTesten Sie es:----proxy----: class com.sun.proxy.$Proxy0
# 🎜🎜#zwei: Verwenden Sie einen dynamischen Proxy, um einen einfachen Interceptor zu implementieren.Da ein dynamischer Proxy verwendet wird, muss es eine Schnittstelle, eine Zielklasse, eine Proxy-Klasse und einen Interceptor geben. 1. Definieren Sie eine Schnittstelle 🎜#
-- --Transaktion 2 starten-----
-----Speichern abgeschlossen------
----Transaktion 2 senden----
---- Transaktion 2 starten- ----
----Löschvorgang abgeschlossen----
----Transaktion 2 senden----public interface BusinessFacade { void doSomething(); }Nach dem Login kopieren
public class BusinessClass implements BusinessFacade {
public void doSomething() {
System.out.println("在业务组件BusinessClass中调用doSomething方法");
}
}
Nach dem Login kopieren
Ausgabeergebnis:
public class BusinessClass implements BusinessFacade { public void doSomething() { System.out.println("在业务组件BusinessClass中调用doSomething方法"); } }
Call-Methode in InterceptorClass: before()
In Business Component Call die doSomething-Methode in BusinessClassRufen Sie die Methode in InterceptorClass auf: after()
Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine einfache Interceptor-Operation in Java über einen dynamischen Proxy. 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



Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.
