Le premier type: configuration d'annotation AOP
Configuration d'annotation AOP (implémentée à l'aide de la bibliothèque de classe AspectJ), à peu près divisée en trois étapes:
1. Utilisez l'annotation @aspect pour définir une section, définissez le point d'entrée (@pointcut) et le type de notification (@Before, @ After Rereturning, @ After, @ AfterStrowing, @ autour).
2. Développer des classes qui doivent être interceptées.
3. Configurez la section dans le XML. Dans ce cas, il sera géré par Spring AOP Container.
De plus, vous devez référencer le package JAR d'Aspectj: AspectJwweaver.jar Aspectjrt.jar
Exemple:
User.javapackage com.bjsxt.model; public public user {private String Username; () {retour de mot de passe;} public void SetPassword (String Motway) {this.password = mot de passe;}} / ** * Classe d'interface * / package com.bjsxt.dao; {public void Save (utilisateur utilisateur);
Implémentez l'interface:
package com.bjsxt.dao.implante; void Save (utilisateur utilisateur) {System.out.println ("User Save11d!");
Classe d'opération:
package com.bjsxt.service; Importer com.bjsxt.dao.userdao; ; userdao;} public void destrument () {System.out.println ("destruction");
Rejoignez AOP
package com.bjsxt.aop; Aspect; . bjsxt.service..*.add(..))") public void myMethod(){}; /*@Before("execution(public void com.bjsxt.dao.impl.UserDAOImpl.save(com.bjs xt .Model .User)) ") * / @before (" myMethod () ") public void avant () {System.out.println (" Méthode Staet ");} @after (" myMethod () ") public void after after after afther () Ot .Println ("Méthode After Rereturning");} @AfterThrowing ("Exécution (public * com.bjsxt.dao .. *. * (..)") public void Afterthrowrowing () {System.out.println ("Method Afterstrowing ");}}
Fichier de configuration
<? xml version = "1.0" Encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org / 2001 / XMLSCHEMA-INSTANCE "XMLNS: context =" http://www.springframework.org/schema/context "xmlns: aop =" http://www.springframework.org/sche ma / aop "xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org / schema / context http: / /www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/sc hema / aop / printemps-aop-aop -3.1 .xsd "> <! - Pour ajouter les 2 dernières lignes -> <contexte: annotation-config /> <context: composant-scan Base-Package =" com.bjsxt "/> <! - scan automatique -> <aop: aspectj-autoproxy /> <! - Pour ajouter cette ligne -> </ beans>
Classe de test:
package com.bjsxt.service; Inverse de Control Public Class UserServiceTest {@Test Public Void TestAdd () Jette une exception {ClassPathxmlApplicationContext CTX = NOUVEAU CLASSPATHXMLAPPLIC ATIONNEXT ("ApplicationContext.xml"); println (service.getClass ());
résultat:
classe com.bjsxt.service.UserService $$ EnhancerByCglib $$ 7B201784Method Statistics Save11d! Méthode après la méthode après ###
Avis:
@Aspect: cela signifie que cette classe est une classe de facettes
@Componet: Parce que le printemps doit être géré en tant que classe tangente, cette initialisation de classe doit être ajoutée à la gestion de Spring pendant l'initialisation;
@Befoe: Logique du point d'entrée (conseils)
Exécution…: syntaxe de coupe ponctuelle
Le deuxième type: configuration XML AOP
Le même que ci-dessus: le fichier de configuration est différent
<? xml version = "1.0" Encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org / 2001 / XMLSCHEMA-INSTANCE "XMLNS: context =" http://www.springframework.org/schema/context "xmlns: aop =" http://www.springframework.org/sche ma / aop "xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org / schema / context http: / /www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/sc hema / aop / printemps-aop-aop -3.1 .xsd "> <! - Pour ajouter les 2 dernières lignes -> <contexte: Annotation-Config /> <context: composant-scan Base-Package =" com.bjsxt "/> <bean id =" Loginterceptor "> </ bean> <aop: config> <aop: Pointcut expression =" EXECUTION (public * com.bjsxt.service .. *. Add (..)) "id =" ServicePointCut "/> <aop: ID d'aspect = "lo gaspect" ref = "Loginterceptor"> <aop: avant méthode = "avant" Pointcut-ref = "ServicePointcut" /> </aop: aspect> </aop: config> </bans>
Les <feans> suivants sont la balise de configuration de ressort et plusieurs propriétés importantes dans les haricots:
xmlns:
Il s'agit du format d'analyse de document XML par défaut, c'est-à-dire des haricots de ressort. L'adresse est http://www.springframework.org/schema/beans.
En définissant cette propriété, tous les attributs déclarés dans les haricots peuvent être utilisés directement via <>, tels que <an bean>, etc.
XMLNS: XSI:
Il s'agit d'une spécification que XML doit être conforme.
XMLNS: AOP:
C'est le point clé, et ce sont des spécifications sémantiques que nous devons utiliser ici, qui sont liées à l'AOP orientée tangente.
XMLNS: TX:
Contenu de configuration lié à la transaction à Spring.
Un fichier XML ne peut déclarer qu'une spécification d'analyse sémantique par défaut.
Par exemple, dans le XML ci-dessus, un seul Beans est la valeur par défaut, et les autres doivent être utilisés via des balises spécifiques, comme AOP, qui a de nombreux attributs. . Par exemple, l'AOP: config ci-dessus.
De même, si les XMLN par défaut sont configurés avec des spécifications d'analyse sémantique liées à l'AOP, vous pouvez dire directement une balise comme la configuration dans XML.
Ce qui précède sont les deux méthodes de configuration de Spring AOP. Il y a plus d'articles sur les méthodes de configuration de Spring AOP à partager avec vous plus tard.