Struts2.3.24 + Spring4.1.6 + Hibernate4.3.11 + Mysql5.5.25 Entwicklungsumfeldkonstruktion und verwandte Anweisungen.
1. Ziel
1. Erstellen Sie eine traditionelle SSH -Entwicklungsumgebung und führen Sie sie erfolgreich aus (Einfügen, Abfrage)
2. Verstehen Sie die Konfiguration des C3P0 -Verbindungspools
3.. Verstehen Sie den sekundären Cache von Hibernate und überprüfen Sie
4. Verstehen Sie die Konfiguration der Federsachen und überprüfen Sie
5. Verstehen Sie das IOC von Spring (Abhängigkeitsinjektion), übergeben Sie das Aktionsobjekt (Bean) von Struts2 bis Spring Management, benutzerdefinierte Bohnen usw. und überprüfen Sie
6. Verstehen Sie die Frühlings-AOP (Abschnittsorientierte Programmierung) und schreiben Sie benutzerdefinierte Abschnittsfunktionen, um die Ergebnisse zu überprüfen
2. Vorbereitung
Entwicklungsumgebung: Sonnenfinsternis für Java EE; MySQL5.5.25; JDK1.7.0_79; navicat10.1.7 (optional);
Erstellen Sie eine Datenbankdemo:
/*Navicat MySQL Data Transfersource Server: localhost_3306Source Server Version: 50519Source Host: localhost: 3306Source-Datenbank: Demotarget Server Typ: Mysqltarget Server Version: 50519File-Codierung: 65001date: 2016-01-09 23: 36: 02*/Set Fremd_Key_KYS: 2016-01-09: 36: 02*/Set Fremd_Key_KYS: 2016-01-09: 36: 02*/Set fremd_ty_ty- 01-09: 36: 02*/set fremd_ty- ------------------------------ Table structure for `user`-- --------------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `account` varchar(200) NOT NULL, `name` varchar(200) NOT NULL, `address` varchar(1000) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB Standard charSet = utf8;
Erstellen Sie ein neues Webprojekt, die Verzeichnisstruktur lautet wie folgt:
Bereiten Sie das JAR-Paket vor und setzen Sie es in das Web-inf-LIB-Verzeichnis (wenn Sie interessiert sind, können Sie Maven verwenden, um den Prozess zu verwalten, aber manchmal ist es sehr langsam, das JAR-Paket herunterzuladen ...)
Verwandte JAR -Pakete finden Sie in den heruntergeladenen Streben, Frühling und Winterschlaf. Hier ist eine Referenz. Einige von ihnen können gelöscht werden, wie die JAR -Pakete im Frühjahrs -MVC -Teil:
A. Konfigurieren Sie web.xml
Konfigurieren Sie einen Struts2 -Filter, um alle *.Action -Anfragen zuzuordnen, und werden vom StrutsprepareAndexecuteFilter -Objekt behandelt.
Konfigurieren Sie den Kontext-Param-Parameter und geben Sie den Pfad der Federkonfigurationsdatei an. Die Parameter in <Context-Param> können unter Verwendung von ServletContext.getInitParameter ("Paramenname") erhalten werden.
Das Konfigurieren von Listener ist hauptsächlich zum Lesen von ApplicationContext.xml -Konfigurationsdateisinformationen, Erstellen von Beans und anderen Initialisierungsarbeiten.
<? XSI: Schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app-app-app-app-app- = <display-name>SSH</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <URL-Pattern>*. Aktion </url-pattern> </filter-mapping> <context-param> <param-name> contextconfigLocation </param-name> <param-value> classPath: applicationContext.xml </param-value> </context-param> <hörer> <hörer> <Hörer-Klasse> org.springframework.web.context.contextloaderListener </Listener-Klasse> </listener> <Welcome-File-List> <Welcome-File> Index.jsp </Welcome-File> </Welcome-File-List> </web-App>
4. Konfigurieren Sie applicationContext.xml
Konfigurieren Sie das automatische Scannen von @RepoTory, @Service und anderen Anmerkungen unter dem SSH -Paket und generieren Sie entsprechende Bohnen.
Konfigurieren Sie die Datenquelle (JDBC Connection Pool ist C3P0. Sie können sich auf die detaillierte Konfiguration von C3P0 beziehen). Die Hauptfunktion des Verbindungspools besteht darin, schnell die Verbindung bereitzustellen und sie wiederzuverwenden. Es erfordert nicht jede Zerstörung und Schöpfung. Es erfordert Konfiguration von Benutzername, Kennwort, maximale Anzahl von Verbindungen, minimale Anzahl von Verbindungen, anfängliche Anzahl von Verbindungen und anderen zugehörigen Parametern.
Konfigurieren von SessionFactory (Sie können sich auf die detaillierte Konfiguration von Hibernate beziehen, in der Sie konfigurieren, um Level -2 -Cache zu aktivieren). Die Hauptfunktion besteht darin, Sitzungen bereitzustellen und SQL -Anweisungen auszuführen. Hier verwenden wir Hibernatetemplate, um die Datenbank zu bedienen, um die physische Kontrolle der Feder zu erleichtern. PS, die Zuordnung zwischen Klassen und Datenbanktabellen sollte auch in der Hibernate -Konfiguration konfiguriert werden.
Konfigurieren Sie den Transaktionsmanager Bean als HibernatetransactionManager und initialisieren Sie das Mitgliedsattribut -SessionFactory in die zuvor konfigurierte Sitzungs -Bean.
Konfigurieren Sie die Ausbreitungsmerkmale der Transaktion und konfigurieren Sie einen Abschnitt, um darauf zu verweisen, und führen Sie die Transaktionskontrolle aller Hinzufügen, Löschen, Aktualisieren und Speichern von Methoden unter allen SSH.Service -Paketen und -Unterschleichen durch. Sie können das Transaktionsausbreitungsverhalten und andere Parameter auch konfigurieren.
Schließlich gibt es eine benutzerdefinierte AOP -bezogene Konfiguration, die den benutzerdefinierten Abschnitt "myaop" anwendet, um alle Methoden zu steuern, die mit Tests unter ssh.aop.aoptest beginnen, und die Ergebnisse werden später überprüft.
<? xmlns: context = "http://www.springframework.org/schema/context" xmlns: tx = "http://www.spingframework.org/schema/tx xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: jdbc = "http://www.spingframework.org/schema/jdbc" xsi: schemalocation = "http http://www.springframework.org/schema/beans http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/sping-tx- http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc http://www.springFramework.org/schema/jdbc/spring-jdbc-441.xsd http://www.springframework.org/schema/context/spring-context-4.1.xsd "> <!-Scans den Klassenpfiff für kommentierte Komponenten (einschließlich @Reposte und @Service, die automatisch als Federbohnen-AUSCEXT: context: component-shan-package = Ssh"/> -Aufschnitt: component-scan-package name = "dataSource" zerstören-method = "close"> <Eigenschaft name = "triverclass" value = "com.mysql.jdbc.driver name = "AccireIncrement" value = "1"> </Eigenschaft> <Eigenschaft name = "initialPoolSize" value = "80"> </Eigenschaft> <Eigenschaft name = "maxidletime" value = "60"> </Property> <Property name name = "maxpoolsize" value = "80"> </property> </property aciefs name = "minpoolSize" minpoolSize "value". value = "1000"> </Eigenschaft> <Eigenschaft name = "accocireretryattempts" value = "60"> </Eigenschaft> <Eigenschaft name = "breakAfteracquireFailure" value = "false"> </Eigenschaft> <! <bean id="sessionFactory"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key = "hibernate.hbm2ddl.auto"> update </prop> <prop key = "current_Session_context_class"> thread </prop> <prop key = "hibernate key = "hibernate.cache.region.factory_class"> org.hibernate.cache.ehcache.ehcacheRegionfactory </prop> <prop key = "hibernate.cache.use_query_cache"> true </prop> <prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</prop> </prop> </props> </property> <property name="mappingLocations"> <list> <value>classpath:ssh/model/User.hbm.xml</value> </list> </property> <!-- <property name="annotatedClasses"> <List> <wert> ssh.model.user </value> </list> </property>-> </bean> <!-transaktionsmanager konfigurieren-> <bean id = "transactionManager"> <Eigenschaft name = "SessionFactory" Ref = "Sessionfactory"/> </bean> <!-Propagation-Eigenschaften von Transaction-Manager = "TransactionManager"> <! name = "add*" Propagation = "Erforderlich" nur schreibgeschützt = "Falsch" Rollback-for = "java.lang.Exception"/> <tx: method name = "delete*" Propagation = "Erforderlich" Read "-Re-Nur" false "rollback-for =" java.lang.Inception "/> <tx: method name =" update rollback-for = "java.lang.Exception"/> <tx: method name = "save*" propagation = "forders" read "-Reed-only =" false "rollback-for =" java.lang.Exception "/> </tx: Attribute> </tx: Ratschläge> <AOP> <AOP> <AOP: Pointcut id =" pcmethod ". /> <AOP: Advisor pointcut-ref = "pcMethod" Ratschläge-ref = "txadvice"/> </aOP: config> <!-benutzerdefinierter AOP-Verarbeitungstest-> <Bean id = "Aoptest"> </bean> <bean id = "myaop"> </bean> <aoP: config: config proxy-target-classe = "true"> </bean> <aoP: config proxy-target-classe <aop:pointcut id="pcMethodTest" expression="execution(* ssh.aop.AopTest.test*(..))"/> <aop:before pointcut-ref="pcMethodTest" method="before"/> <aop:after pointcut-ref="pcMethodTest" method="after"/> </aop:aspect> </aop:config> </beans>
5. Konfigurieren Sie Struts.xml
Konfigurieren Sie die Strukturen.
Konfigurieren Sie den Ergebnistyp in "JSON", und Sie können auch andere Dinge konfigurieren. Hier ist es für die Bequemlichkeit der Front-End- und Back-End-Dateninteraktion im JSON-Format konfiguriert.
Konfigurieren Sie zwei Aktionen, Adduser und QueryAlluser;
<? name = "Strutss.Enable.DynamicMethodinVocation" value = "false" /> <Constant name = "Struts.DevMode" value = "false" /> <package name = "default" extends = "struts-Default, Json-Default"> <global-results> <result type = " name = "contentType"> text/html </param> </result> </global-results> <action name = "adduser" methode = "adduser"> <result>.
6. Relevanten Code schreiben
Anmerkungen:
DAO erbt die Hibernatedaosupport-Klasse, und alle datenbankbezogenen Operationen werden mit Hibernatetemplate betrieben.
Fügen Sie der DAO -Ebene, der Serviceschicht und der Aktion entsprechende Anmerkungen hinzu und registrieren Sie sich als Frühlingsbohnen.
Der beigefügte Code lautet wie folgt:
UserAction.java
Paket ssh.Action; import Java.io.printwriter; import Java.util.list; import Javax.annotation org.apache.struts2.servletactactacontext; import org.springframework.stereotype.controller; import SSH.AOP.AOPTEST; Import ssh.model.user; import SSH.Service.Userservice; Logger.getLogger (userAction.class); @Resource Private UserService UserService; @Resource Private Aoptest Aoptest; public void adduser () {printwriter out = null; try {httpServletRequest request = servletActActionContext.getRequest (); HttpServletResponse response = servletActionContext.getResponse (); Antwort.SetContentType ("text/html; charSet = utf-8"); String account = request.getParameter ("Konto"); String name = request.getParameter ("Name"); String address = request.getParameter ("Adresse"); User user = new user (); user.setAccount (Konto); user.setAddress (Adresse); user.setName (name); userService.add (Benutzer); out = response.getWriter (); out.write (New GSON (). Tojson ("Erfolg")); } catch (Ausnahme e) {e.printstacktrace (); logger.Error (e.getMessage ()); if (out! = null) out.write (new gson (). tojson ("fail")); } endlich {out.flush (); out.close (); }} public void queryAlluser () {printwriter out = null; Aoptest.Test1 (); Aoptest.Test2 (); //logger.Error("i "); try {httpServletResponse response = servletActActionContext.getResponse (); Antwort.SetContentType ("text/html; charSet = utf-8"); Gson gson = new gson (); Liste <Unters> userList = userService.queryalluser (); String Gserstr = gson.tojson (Benutzerliste); out = response.getWriter (); out.write (Gserstr); } catch (Ausnahme e) {e.printstacktrace (); logger.Error (e.getMessage ()); if (out! = null) out.write (new gson (). tojson ("fail")); } endlich {out.flush (); out.close (); }}}Aoptest.java
Paket ssh.aop; public class Aoptest {public void test1 () {System.out.println ("Aoptest Test1 -Methode wird ~"); } public void test2 () {System.out.println ("Aoptest Test2 -Methode läuft ~"); }}Myaop.java
Paket SSH.AOP; öffentliche Klasse myaop {public void vor () {system.out.println ("bee ~"); } public void After () {System.out.println ("After ~"); }}Basiertao.java
Paket ssh.dao.base; import javax.annotation.resource; import org.hibernate.sessionFactory; this.etetSessionFactory (SessionFactory); }}
Userdao.java
Paket ssh.dao; import Java.util.ArrayList; import Java.util.list; import org.springframework.orm.Hibernate4.hibernatetemplate import org. erweitert basiertAo {public void add (Benutzer Benutzer) {this.gethiberNatetemplate (). Speichern (Benutzer); } @SuppressWarnings ("deaktiviert") publiclist <Unter> queryAlluser () {list <Unter> user> user = new ArrayList <Unter> (); Hibernatetemplate hibernatetemplate = this.gethiberNatetemplate (); hibernatetemplate.setCachequeries (true); user = (list <Unter>) hibernatetemplate.find ("From User"); hibernatetemplate.setCachequeries (false); Rückkehrbenutzer; }}User.java
Paket ssh.model; import Java.io.Serializable; öffentliche Klasse User implementiert serialisierbare { / ** * * / private statische endgültige lange Serialversionuid = -6190571611246371934L; private lange Ausweis; private String -Konto; privater Zeichenfolge Name; private String -Adresse; public String getAccount () {Rückgabekonto; } public String getName () {return name; } public String getAddress () {Rückgabeadresse; } public void setAccount (String -Konto) {this.account = Konto; } public void setName (String -Name) {this.name = name; } public void setAddress (String -Adresse) {this.address = address; } / ** * @return die id * / public long getid () {return id; } / ** * @param id Die ID zum Setzen von * / public void setID (Long ID) {this.id = id; }}User.hbm.xml
<? Alle Beiträge von Drittanbietern werden von Red Hat Inc. verteilt. Dieses urheberrechtlich geschützte Material wird jedem zur Verfügung gestellt, die es unterliegen möchten, unterliegen den Geschäftsbedingungen der von der Free Software Foundation veröffentlichten Allgemeinen Geschäftsbedingungen der gnu ~ weniger allgemeinen öffentlichen Lizenz. ~ ~ Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne Garantie; Ohne die implizite Garantie der Handelsfähigkeit oder der Fitness für einen bestimmten Zweck. Weitere Informationen finden Sie in der GNU Lesser General Public Lizenz ~. ~ ~ Sie hätten eine Kopie der GNU Lesser General Public Lizenz erhalten haben. Wenn nicht, schreiben Sie an: ~ Free Software Foundation, Inc. ~ 51 Franklin Street, fünfter Stock ~ Boston, MA 02110-1301 USA-> <! DocType Hibernate-maping public "-// Hibernate/Hibernate-Mapping DTD 3.0 // en" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><Hibernate-mapping package type = "java.lang.String" column = "account"/> <Eigenschaft name = "name" type = "java.lang.String" column = "name"/> <Eigenschaft name = "adresse" type = "java.lang.string" column = "adress"/> </klassifiziert> </hiebnate-maping>
UserService.java
Paket ssh.service; import java.util.list; import javax.annotation.resource; import org. public list <Bener> queryAlluser () {userDao.queryallUser () zurückgeben; } public void add (Benutzer Benutzer) {userDao.add (Benutzer); }}index.jsp (Denken Sie daran, die JQuery -Bibliothek hinzuzufügen)
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html public "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><Html><Head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <titels> fügen Sie hier zu. 20px;}</style></head><body><div style="text-align: center;"> <div><label>Account: </label><input id="account" type="text"/></div> <div><label>Name: </label><input id="name" type="text"/></div> <div><label>Address: </label><input id="address" type = "text"/> </div> <div> <button id = "addUser"> add </button> </div> <h3> Benutzerliste: </h3> <ul id = "userList"> </ul> <script type = "text/javaScript" src = "js/jquery.1.Min.Min.Min.j.js" </</</</</</</</</</</</</</</</</</</</· </</</</· </</</· </</</ubl. : 'queryAlluser.action', type: 'post', dataType: 'json', Erfolg: Funktion (Daten) {try {for (var i = 0; i <data.length; i ++) {$ ("#userList"). append ("<li> <span style = 'color: rot'> id = "+data [i] .id+" </span>, account = "+data [i] .account+", name = "+data [i] .name+", adress = "+data [i] .address+" </li> "); }} catch (e) {}; }, Fehler: Funktion (e) {alert ("sys error"); }}); $ ("#adduser"). on ("click", function () {var account = $ ("#account"). val (); var name = $ ("#name"). val (); var adress = $ ("#address"). val (); Erfolg: function (data) {try {$ ("#userlist"). }); }); </script> </body> </html>7. Überprüfungsergebnisse
Kehren Sie zum Anfang zurück, beginnen Sie mit relevanten Technologien und überprüfen Sie die Ergebnisse
1. Erstellen Sie eine traditionelle SSH -Entwicklungsumgebung und führen Sie sie erfolgreich aus (Einfügen, Abfrage)
Die folgende Abbildung: Abfragen und Benutzer erfolgreich hinzufügen;
2. Verstehen Sie die Konfiguration des C3P0 -Verbindungspools
Datenbankverbindungen sind teure Ressourcen, und das Öffnen und Schließen der Leistung. Daher können sie mit einem Verbindungspool verwaltet werden, wobei mehrere Verbindungen initialisiert und wiederholt werden, anstatt ein wiederholtes Schließen zu erstellen, das einem Thread -Pool etwas ähnlich ist.
Die Konfiguration ist wie folgt. Um die minimale und maximale Anzahl von Verbindungen gemäß der tatsächlichen Projektsituation vernünftig zu konfigurieren, finden Sie im Link für die detaillierte Bedeutung jedes Parameters.
Zusätzlich ist es sehr einfach, die Konfiguration der Verbindungsnummer zu überprüfen. Sie können ein Programm schreiben, um es selbst zu überprüfen. Wenn beispielsweise die maximale Anzahl von Verbindungen 10 beträgt, können Sie ein Programm schreiben, um es zu überprüfen. Nach der Öffnung von 10 Verbindungen befindet sich die 11. Verbindung in einem Wartezustand und kann nicht erhalten werden. Daher müssen Sie die Anzahl der Verbindungen entsprechend der Situation angemessen konfigurieren, da sie sonst die Anwendungsleistung beeinflussen kann.
<!-Support Data Source-> <bean name = "dataSource" Destroy-method = "close"> <Eigenschaft name = "TRAVERCLASS" value = "com.mysql.jdbc.driver" /> <Eigenschaft name = "jdbcurl" value = "jdbc: MySQL: // localhost: 3306 /demo". value="root" /> <property name="acquireIncrement" value="1"></property> <property name="initialPoolSize" value="80"></property> <property name="maxIdleTime" value="60"></property> <property name="maxPoolSize" value="80"></property> <property name="minPoolSize" value="30"></property> <property name = "accocireretryDelay" value = "1000"> </property> <Eigenschaft name = "accocireretryattempts" value = "60"> </property> <Eigenschaft name = "breakAfteracquireFailure" value = "false"> </property> <!- Wenn zu viele Verbindungen angezeigt werden, wenden Sie sich an, dass die Konfigurationsdateien. ProcessList) -> </bean>
3.. Verstehen Sie den sekundären Cache von Hibernate und überprüfen Sie
Der Hibernate-Cache der ersten Ebene bezieht sich auf den Sitzungs-Cache, der standardmäßig aktiviert ist. Der Cache der zweiten Stufe ist der SessionFactory-Bereich-Cache. Bei der Konfiguration des SessionFactory haben wir den Cache der zweiten Ebene als EHCache konfiguriert. Als nächstes überprüfen wir den Effekt und fragen den Benutzervorgang ab. Wir fanden heraus, dass die erste Abfrage die Datenbank betreiben, die SQL -Anweisung drucken und die Seite nach Auffrischung festgestellt haben, dass die Abfrage erfolgreich war und keine SQL -Anweisung gedruckt wurde. Wie in der Abbildung unten gezeigt, können wir sehen, dass die sekundäre Cache -Arbeit in Ordnung ist.
4. Verstehen Sie die Konfiguration der Federsachen und überprüfen Sie
Das sogenannte Transaktionskontrollprinzip ist das gleiche, nämlich Atomizität, Konsistenz, Isolation und Persistenz. Beim Programmieren von JDBC wird es von selbst kontrolliert. Legen Sie autocommit = false fest, um nicht automatisch zu senden, und schreiben Sie dann bestimmte Datenbankvorgänge. Wenn eine Ausnahme eintritt, rollback, ansonsten verpflichten; Tatsächlich ist das Kontrollprinzip der Feder bei den Dingen ähnlich und wird mit einigen Verpackungen, Konfigurationen usw. hinzugefügt, was bequemer ist, z. B. die Kontrolle verschiedener Methoden in der Serviceschicht.
Die Überprüfung ist sehr einfach. Schreiben Sie zwei Einfügungsvorgänge in eine Methode auf Serviceebene (beachten Sie, dass der Methodenname den in der Federkonfigurationsdatei konfigurierten Regeln entsprechen muss), geben Sie eine Ausnahme in die Mitte und führen Sie sie anschließend aus. Wenn Sie feststellen, dass der erste Benutzer erfolgreich eingefügt wird, bedeutet dies, dass die Transaktionskontrolle ungültig ist, andernfalls ist er in Ordnung.
5. Verstehen Sie das IOC von Spring (Abhängigkeitsinjektion), übergeben Sie das Aktionsobjekt (Bean) von Struts2 bis Spring Management, benutzerdefinierte Bohnen usw. und überprüfen Sie
Wenn Sie sorgfältig beobachten, besteht die Hauptarbeit bei der Konfiguration der ApplicationContext.xml-Datei darin, Bean-bezogene Informationen zu konfigurieren. Diese Bohnen werden im Voraus erstellt, aber tatsächlich sind die sogenannten Bohnen Objekte;
Der Zweck der Übergabe der Schaffung von Objekten an den Federbehälter ist das Entkoppeln.
Bei Verwendung von Streben registriert Spring -Aktion als Bean, die standardmäßig ein Singleton ist. Nicht jedes Mal, wenn eine neue Aktion während des Zugriffs ausgestellt wird, besteht ein Risiko, wenn gleichzeitiger Zugang zugänglich ist.
Sie können die Aktion jedoch über Scope = "Prototyp" in mehreren Fällen konfigurieren. PS: Die Aktion in Struts2 ist standardmäßig mehrfach.
Hinweis: Die in applicationContext.xml konfigurierten Bohnen und die in benutzerdefinierten Annotationen konfigurierten Bohnen können während des Auslaufs des Programms direkt erhalten werden. Dies ist leicht zu überprüfen. Schreiben Sie einfach ein kleines Programm.
6. Verstehen Sie die Frühlings-AOP (Abschnittsorientierte Programmierung) und schreiben Sie benutzerdefinierte Abschnittsfunktionen, um die Ergebnisse zu überprüfen
Diese Idee wird an vielen Stellen in dieser Form der Sektionsprogrammierung verwendet, wie z. B. Filter, Interceptors, Transaktionskontrolle usw.
Das Prinzip ist Java Reflection und Dynamic Proxy, die die Methode vor und nach der Ausführung steuert und den Code, den Sie ausführen möchten, hinzufügt.
Dem kleinen Beispiel wird ein Abschnitt hinzugefügt, und vor und nach dem Drucken vor und nach der Ausführung der Methode werden die Zeichenfolgen gedruckt. Wie in der Abbildung unten gezeigt, funktioniert es normal. Bitte beachten Sie den vorherigen Teil des Codes:
<!-- Custom aop processing test--> <bean id="aopTest"></bean> <bean id="myAop"></bean> <aop:config proxy-target-class="true"> <aop:aspect ref="myAop"> <aop:pointcut id="pcMethodTest" expression="execution(* ssh.aop.aoptest.test*(..)) "/> <aoP: vor pointcut-ref =" pcMethodtest "methode =" vor "/> <aop: After Pointcut-ref =" pcMethodest "methode =" nach "/> </aop: Aspekt> </aop: config> config> config> config>
@Author ein windartiger Coder
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.