Dieser Artikel zeigt die Implementierung von AOP unter Verwendung von Aspektj -Annotation und XML -Konfiguration im Frühjahr
Das Folgende ist das Java -Projekt, das AOP unter Verwendung von Aspekte -Anmerkungen implementiert
Erstens befindet sich die Datei applicationContext.xml unter dem Klassenpfad
<? xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.spingframework.org/schema/tx" xsi: Schemalocation = "http://wwwwwwwwwwwwwwwwwwwwwwww.Stx http://www.springframework.org/schema/beans/spring-beans-2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/sping-- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd "> <!-Aspekte Aspekte für Annotation-> <aoP: Aspekt: Aspekt: Aspekt: Aspekt: Aspekt: Aspekt: Aspekt: Aspekt: Aspekt: Aspekt: Aspekt: Aspecej-autoproxy/>; id = "SecurityHandler"/> </beans>
Dann gibt es die Service Layer -Schnittstelle und die Implementierungsklasse
Paket com.jadyer.Annotation; public interface userManager {public void adduser (String -Benutzername, String -Passwort); public void deluser (int userId); public String findUserById (int userId); public void modifyUser (int userId, String -Benutzername, String -Passwort); } / *** Der obige UserManager ist die Schnittstelle der Serviceschicht* Die folgende UserManagerImpl ist die Implementierungsklasse der Service Layer -Schnittstelle* / Package com.jadyer.annotation; public class userManagerImpl implementiert userManager {public void adduser (String-Benutzername, String-Passwort) {System.out.println ("------- UserManagerImpl.adduser () ist aufgerufen -----"); } public void deluser (int userId) {System.out.println ("-------- UserManagerImpl.deluser () wird aufgerufen ------"); } public String findUserById (int userId) {System.out.println ("------ UserManagerImpl.finduserById () wird aufgerufen -------"); Rückkehr "Eisengesicht"; } public void modifyUser (int userId, String-Benutzername, String-Passwort) {System.out.println ("------- UserManagerImpl.modifyUser () wird aufgerufen ------"); }} Als nächstes kommt die Eingangsklasse, die mit Aspektj gekennzeichnet ist
Paket com.jadyer.Annotation; import org.aspespectj.lang.annotation.after; import org.aspespectj.lang.annotation.aspep; import org.aspespectj.lang.annotation.pointcut; @Aspespe public class SecurityHandler { /** * Pointcut definieren * @see pointcut Der Name von Pointcut ist addaddMethod (). Diese Methode hat keinen Rückgabewert und keine Parameter* @see Diese Methode ist eine Kennung und nennt es nicht*/@pointcut ("Ausführung (* add* (..)") // Übereinstimmung mit allen Methoden, die mit dem Add -Add -void addDDMethod () {} addieren; /*** Ratschläge definieren* @see gibt an, welche Pointcut-Abonnements unser Rat an Joinpoints gilt }} Schließlich die Client -Testklasse
Paket com.jadyer.Annotation; import org.springframework.context.ApplicationContext; import org.springframework.context.support.classPathXmlApplicationContext; /*** Spring -Unterstützung für AOP: Übernimmt die Annotationsmethode* @see --------------------------------------------------------------------------------------------------------------------------------------------------------- Voraussetzung: Da es sich um einen JDK-dynamischen Proxy handelt, muss die Klasse eine Schnittstelle implementieren. Das heißt, die Gewohnheit der interface-orientierten Programmierung* @see zu entwickeln ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Annotationsunterstützung hinzugefügt * @see * spring_home // dist // spring.jar * @see * spring_home // lib // log4j // log4j-1.14.jar * @see * spring_home // lib // jakarta-commons // commons-logging.jar * @see Cross-Slicing-Bedenken und Feststellung von SecurityHandler.java * @see 3. verwenden Annotationen, um SecurityHandler als Aspekt * @see 4 zu angeben. Verwenden Sie Annotationen, um Ratschläge und Pointcut * @see 5 zu definieren. --------------------------------------------------------------------------------------------------------------------------------------------------------- (UserManager) factory.getBean ("userManager"); userManager.adduser ("Zhang qiling", "02200059"); }} Das Folgende ist das Java -Projekt, das AOP mithilfe von XML -Konfigurationsdateien implementiert
Zunächst befindet sich die ApplicationContext-cglib.xml-Datei im Stammverzeichnis von SRC
<? xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.spingframework.org/schema/tx" xsi: Schemalocation = "http://wwwwwwwwwwwwwwwwwwwwwwww.Stx http://www.springframework.org/schema/beans/spring-beans-2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/sping-- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd "> <!-Force-Verwendung von Cglib Proxy-> <! id = "userManager"/> <bean id = "SecurityHandler"/> <AOP: config> <AOP: Aspekt id = "Securityaspep" Ref = "SecurityHandler"> <AOP: pointcut id = "addaddMethod" Expression = "Ausführung (* add* ()") "/> <AOP: vor methody =" achodScureScurity "adaddmethdmeth. </AOP: config> </beans> <!- Alle Methoden mit add (*add*(..) übereinstimmen alle Methoden aller Klassen unter com.jadyer.servcices.impl-Paketausführung (*com.jadyer.servcices.impl.*. com.jadyer.services.impl.*. add*(..)) || Ausführung (*com.jadyer.services.impl.*. Del*(..)) ->
Dann gibt es die Service Layer -Schnittstelle und die Implementierungsklasse
Paket com.jadyer.cglib; public interface userManager {public void adduser (String -Benutzername, String -Passwort); public void deluser (int userId); public String findUserById (int userId); public void modifyUser (int userId, String -Benutzername, String -Passwort); } / *** Der obige UserManager ist die Service Layer -Schnittstelle* Der folgende UserManagerImpl ist die Implementierungsklasse der Service Layer -Schnittstelle* / Package com.jadyer.cglib; public class userManagerImpl {// implementiert userManager {public void adduser (String-Benutzername, String-Passwort) {System.out.println ("------- userManagerImpl.adduser () ist aufgerufen -----"); } public void deluser (int userId) {System.out.println ("-------- UserManagerImpl.deluser () ist aufgerufen -----"); } public String findUserById (int userId) {System.out.println ("------ UserManagerImpl.finduserById () ist aufgerufen -----"); Rückkehr "Zhang San"; } public void modifyUser (int userID, String-Benutzername, String-Passwort) {System.out.println ("------- UserManagerImpl.modifyUser () ist aufgerufen ------"); }} Als nächstes ist die in ApplicationContext-cglib.xml angegebene Eintragungsklasse
Paket com.jadyer.cglib; import org.aspespectj.lang.joinpoint; /*** Übergeben Sie die Client -Anrufinformationen an den Rat* @see Sie können dem Rat einen Joinpoint -Parameter hinzufügen, um den Methodennamen und den Parameterwert des Client -Anrufs* @see in der Zukunft zu erhalten. Es gibt weniger Fälle von reinem AOP, um solche Dinge zu schreiben. Wir verwenden hauptsächlich die von Spring* @see bereitgestellten Transaktionen. Das Folgende ist der Beispielcode */ public class SecurityHandler {private void Checksecurity (joinpoint Joinpoint) {für (int i = 0; i <joinpoint.getArgs (). Länge; i ++) {System.out.println (joinpoint.getargs () [i]); // den Parameterwert der vom Client} system.out.println aufgerufenen Methode (joinpoint.getSignature (). GetName ()) erhalten; // Erhalten Sie den vom Client system.out.println aufgerufenen Methodennamen ("------ [Checksecurity wird aufgerufen] ------"); }} Schließlich die Client -Testklasse
Paket com.jadyer.cglib; import org.springframework.context.ApplicationContext; import org.springframework.context.support.classPathXmlApplicationContext; /** * @sehen --------------------------------------------------------------------------------------------------------------------------------------------------------- Vererbung ist es am besten, die endgültige Erklärung für die Zielklasse* @see nicht zu verwenden --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Weil die Ziele, die wir Proxy haben, im Allgemeinen Business -Objekte* @see sind ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ public class client {public static void main (String [] args) {applicationContext factory = new classPhodexmlApplicationContext ("applicationContext-cglib.xml"); // Wenn UserManagerImpl die UserManager -Oberfläche implementiert, verwendet Spring automatisch den JDK Dynamic Proxy // Wenn das Projekt die CGGLIB -Bibliothek eingeführt hat und die Verwendung von CGGLIB -Proxy in der Konfigurationsdatei erzwungen hat, verwendet Spring nur den CGGLIB -Proxy // UserManager = (UserManager). // Da die UserManagerImpl die UserManager -Schnittstelle zu diesem Zeitpunkt nicht implementiert, kann die Benutzermanager -Schnittstelle im empfangenden Typ nicht verwendet werden. Obwohl der CGGLIB -Proxy nicht gezwungen ist, in der Konfigurationsdatei verwendet zu werden, verwendet Spring automatisch den CGGLIB Proxy UserManagerImpl UserManager = (UserManagerImpl) factory.getBean ("UserManager"). userManager.adduser ("Wu Sansheng", "02200059"); }}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.