In der Kolumne „MySQL-Tutorial“ erfahren Sie, was Sie über den Frühling beherrschen müssen.
Hallo zusammen! Ich bin ein begeistertes Mitglied des Chaoyang-Volkes.Wir stellen das Spring-Framework vor
In der Spring-Ära konfigurierten wir Beans normalerweise über XML-Dateien. Später waren Entwickler der Meinung, dass es nicht gut sei, XML-Dateien zum Konfigurieren von Beans zu verwenden, sodass die Konfiguration von Spring Boot-Annotationen nach und nach populär wurde.
AOP (Aspektorientierte Programmierung) kann Logik oder Verantwortlichkeiten kombinieren, die nichts mit dem Geschäft zu tun haben, aber häufig von Geschäftsmodulen aufgerufen werden (z. B. Transaktionsverarbeitung, Protokollverwaltung, Berechtigungskontrolle usw.) sind gekapselt, um die Reduzierung doppelten Codes im System zu erleichtern, die Kopplung zwischen Modulen zu reduzieren und zukünftige Skalierbarkeit und Wartbarkeit zu erleichtern.
Spring AOP basiert auf einem dynamischen Proxy. Wenn das zu vermittelnde Objekt eine bestimmte Schnittstelle implementiert, verwendet Spring AOP den dynamischen JDK-Proxy, um das Proxy-Objekt zu erstellen. Für Objekte, die die Schnittstelle nicht implementieren, kann der dynamische JDK-Proxy nicht verwendet werden Verwenden Sie stattdessen den dynamischen CGlib-Proxy, um eine Unterklasse des Proxy-Objekts als Proxy zu generieren.
Natürlich können Sie auch AspectJ verwenden. AspectJ wurde in Spring AOP integriert und sollte als das umfassendste AOP-Framework im Java-Ökosystem angesehen werden. Nach der Verwendung von AOP können wir einige allgemeine Funktionen abstrahieren und sie direkt dort verwenden, wo sie benötigt werden, was die Codemenge erheblich vereinfachen kann. Wir müssen neue Funktionen bequem hinzufügen und die Skalierbarkeit des Systems verbessern. AOP wird in Szenarien wie Protokollierungsfunktionen, Transaktionsverwaltung und Berechtigungsverwaltung verwendet.
Spring AOP ist eine Laufzeitverbesserung, während AspectJ eine Kompilierungszeitverbesserung ist. Spring AOP basiert auf Proxying, während AspectJ auf Bytecode-Manipulation basiert.
Spring AOP hat AspectJ integriert, das als das vollständigste AOP-Framework im Java-Ökosystem angesehen werden sollte. AspectJ ist leistungsfähiger als Spring AOP, aber Spring AOP ist relativ einfacher.
Wenn wir weniger Aspekte haben, wird es kaum einen Leistungsunterschied zwischen den beiden geben. Wenn jedoch zu viele Aspekte vorhanden sind, ist es am besten, AspectJ zu wählen, das viel schneller als SpringAOP ist.
Meistens verwenden wir kein Multithreading im System, daher achten nur wenige Menschen auf dieses Problem. Singleton-Beans haben Threading-Probleme, vor allem weil das Schreiben von Vorgängen in die nicht statischen Mitgliedsvariablen dieses Objekts zu Thread-Sicherheitsproblemen führt, wenn mehrere Threads dasselbe Objekt betreiben.
Es gibt zwei gängige Lösungen:
Bohnenlebenszyklus im Frühling?
Wenn wir über dieses Problem sprechen, müssen wir die vorherigen Epochen von Model1 und Model2 ohne Spring MVC erwähnen.
**Model1-Ära:**Viele Back-End-Programmierer, die erst spät Java gelernt haben, waren möglicherweise nicht mit der JavaWeb-Anwendungsentwicklung im Model1-Modus vertraut. Im Model1-Modus besteht die gesamte Webanwendung fast ausschließlich aus JSP-Seiten, und nur eine kleine Anzahl von JavaBeans wird für die Verarbeitung von Datenbankverbindungen, Zugriffen und anderen Vorgängen verwendet. In diesem Modus ist JSP sowohl die Kontrollschicht als auch die Präsentationsschicht. Offensichtlich gibt es bei diesem Modell viele Probleme. Beispielsweise sind Steuerlogik und Leistungslogik miteinander vermischt, was zu einer extrem niedrigen Code-Wiederverwendungsrate führt. Ein weiteres Beispiel ist, dass Front-End und Back-End voneinander abhängig sind, was das Testen erschwert und die Entwicklungseffizienz äußerst gering ist.
Modell2-Ära: Freunde, die Servlet studiert und verwandte Demos durchgeführt haben, sollten das Entwicklungsmodell von Java Bean (Modell) + JSP (Ansicht) + Servlet (Controller) verstehen. Dies ist das frühe Java Web MVC-Entwicklungsmodell. Das Modell sind die im System beteiligten Daten, d. h. Dao und Beans. Die Ansicht wird zum Anzeigen der Daten im Modell verwendet. Der Controller sendet Benutzeranforderungen zur Verarbeitung an Servlet, gibt die Daten an JSP zurück und zeigt sie an Benutzer.
Im Model2-Modus gibt es immer noch viele Probleme. Der Grad der Abstraktion und Kapselung von Model2 ist bei weitem nicht ausreichend. Infolgedessen entstanden viele MVC-Frameworks im Zusammenhang mit der Java-Webentwicklung, wie z. B. Struts2. Da Struts2 jedoch relativ umständlich ist, erschien das Spring MVC-Framework mit der Beliebtheit des Spring-Leichtbau-Entwicklungsframeworks im Spring-Ökosystem. Spring MVC ist derzeit das beste MVC-Framework. Spring MVC ist einfacher und bequemer zu verwenden, weist eine höhere Entwicklungseffizienz auf und läuft schneller.
MVC ist ein Designmuster und Spring MVC ist ein hervorragendes MVC-Framework. Spring MVC kann uns dabei helfen, eine prägnantere Webschicht zu entwickeln, und es ist natürlich in das Spring-Framework integriert. Unter Spring MVC unterteilen wir Back-End-Projekte im Allgemeinen in Service-Schicht (Verarbeitungsgeschäft), Dao-Schicht (Datenbankoperationen), Entitätsschicht (Entitätsklasse) und Controller-Schicht (Kontrollschicht, die Daten an die Front-End-Seite zurückgibt).
Das einfache schematische Diagramm von Spring MVC lautet wie folgt:
Prozessbeschreibung:
1. Der Client (Browser) sendet eine Anfrage direkt an das DispatcherServlet.
2.DispatcherServlet ruft HandlerMapping basierend auf den Anforderungsinformationen auf und analysiert den der Anforderung entsprechenden Handler.
3. Analysieren Sie den entsprechenden Handler (den wir normalerweise als Controller bezeichnen).
4.HandlerAdapter ruft den echten Prozessor gemäß dem Handler auf, um die Anforderung zu verarbeiten und die entsprechende Geschäftslogik auszuführen.
5. Nachdem der Prozessor die Verarbeitung des Geschäfts abgeschlossen hat, gibt er ein ModelAndView-Objekt zurück. Model ist das zurückgegebene Datenobjekt und View ist die logische Ansicht.
6. ViewResolver findet die tatsächliche Ansicht basierend auf der logischen Ansicht.
7.DispatcherServlet übergibt das zurückgegebene Modell an View (Ansichtsrendering).
8. Geben Sie die Ansicht an den Anforderer (Browser) zurück.
##Welche Entwurfsmuster werden im Spring-Framework verwendet?
Beispiel für die Verwendung der @Bean-Annotation:
@Configurationpublic class AppConfig { @Bean public TransferService transferService() { return new TransferServiceImpl(); }}复制代码
Der obige Code entspricht der folgenden XML-Konfiguration:
<beans> <bean id="transferService" class="com.common.TransferServiceImpl"/></beans>复制代码
Das folgende Beispiel kann nicht durch die @Component-Annotation erreicht werden:
@Beanpublic OneService getService(status) { case (status) { when 1: return new serviceImpl1(); when 2: return new serviceImpl2(); when 3: return new serviceImpl3(); }}复制代码
我们一般使用@Autowired注解去自动装配bean。而想要把一个类标识为可以用@Autowired注解自动装配的bean,可以采用以下的注解实现:
在TransactionDefinition接口中定义了五个表示隔离级别的常量:
**ISOLATION_DEFAULT:**使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。
**ISOLATION_READ_UNCOMMITTED:**最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
**ISOLATION_READ_COMMITTED: **Ermöglicht das Lesen von Daten, die durch gleichzeitige Transaktionen übermittelt wurden, wodurch fehlerhafte Lesevorgänge verhindert werden können, es können jedoch weiterhin Phantomlesevorgänge oder nicht wiederholbare Lesevorgänge auftreten
**ISOLATION_REPEATABLE_READ:** Mehrere Leseergebnisse für dasselbe Feld Sie sind alle konsistent, es sei denn, die Daten werden durch die Transaktion selbst geändert. Dies kann schmutzige Lesevorgänge und nicht wiederholbare Lesevorgänge verhindern, es können jedoch weiterhin Phantomlesevorgänge auftreten.
**ISOLATION_SERIALIZABLE: **Die höchste Isolationsstufe, vollständig kompatibel mit der ACID-Isolationsstufe. Alle Transaktionen werden der Reihe nach ausgeführt, sodass keine Möglichkeit einer Interferenz zwischen Transaktionen besteht. Mit anderen Worten: Diese Ebene kann Dirty Reads, nicht wiederholbare Lesevorgänge und Phantom Reads verhindern. Dies wird jedoch die Leistung des Programms erheblich beeinträchtigen. Normalerweise wird diese Ebene nicht verwendet.
Acht Konstanten, die das Transaktionsausbreitungsverhalten darstellen, sind in der TransactionDefinition-Schnittstelle definiert.
**PROPAGATION_REQUIRED: **Wenn derzeit eine Transaktion vorhanden ist, treten Sie der Transaktion bei. Wenn derzeit keine Transaktion vorhanden ist, erstellen Sie eine neue Transaktion.
PROPAGATION_SUPPORTS: Wenn derzeit eine Transaktion vorhanden ist, treten Sie der Transaktion bei. Wenn derzeit keine Transaktion vorhanden ist, führen Sie die Ausführung auf nicht-transaktionale Weise fort.
PROPAGATION_MANDATORY: Wenn derzeit eine Transaktion vorhanden ist, nehmen Sie an der Transaktion teil. Wenn keine aktuelle Transaktion vorhanden ist, lösen Sie eine Ausnahme aus. (obligatorisch: obligatorisch).
PROPAGATION_REQUIRES_NEW: Erstellen Sie eine neue Transaktion, und wenn derzeit eine Transaktion vorhanden ist, unterbrechen Sie die aktuelle Transaktion.
PROPAGATION_NOT_SUPPORTED: Im nicht-transaktionalen Modus ausführen Wenn derzeit eine Transaktion vorhanden ist, wird die aktuelle Transaktion ausgesetzt.
PROPAGATION_NEVER: Wird im nicht-transaktionalen Modus ausgeführt und löst eine Ausnahme aus, wenn derzeit eine Transaktion vorhanden ist.
###Andere Situationen:
PROPAGATION_NESTED: Wenn derzeit eine Transaktion vorhanden ist, erstellen Sie eine Transaktion, die als verschachtelte Transaktion der aktuellen Transaktion ausgeführt werden soll. Wenn derzeit keine Transaktion vorhanden ist, entspricht der Wert PROPAGATION_REQUIRED.
Ich hoffe, dass Sie diese Inhalte meistern und mich weiterhin unterstützen können, vielen Dank.
Weitere verwandte kostenlose Lernempfehlungen: MySQL-Tutorial(Video)
Das obige ist der detaillierte Inhalt vonsammeln! Was der Frühling meistern muss. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!