AspectJ décrit la tangente et l'amélioration par annotations.
1 Exigences d'environnement de développement
Parce que vous souhaitez utiliser des annotations, assurez-vous d'utiliser Java 5.0 et supérieur.
Introduire la bibliothèque de classes liées à AspectJ:
<dependency> <proupId> org.AspectJ </proupId> <ArtifActid> AspectJrt </Retifactid> <De version> $ {aspectj.Version} </preint> </Dependency> <Dedency> <ProupId> org.aspectj </proupId> <Artifactid> AspectJwweaver </letifactive> <version>${aspectj.version}</version></dependency><dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>${aspectj.version}</version></dependency><dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version> $ {aspectj.version} </ version> </ dépendance> <dependency> <proupId> aopalliance </proupId> <ArtefactId> AOPALLIVIE </ARFACTID> <DERVIÈRE> $ {aOpalliance.Version} </ version> </pedidency> 2 méthodes de programmation
@ Aspect // Identifier les facettes
classe publique PrerentaSpect {/ ** * Logique améliorée * / @Before ("EXECUTION (* Rent (..))") // Définir les types de tangente et d'amélioration publique void beforerent () {System.out.println ("Démarrer l'exécution des actions de location"); }}Cette section est juste un POJO ordinaire, mais l'annotation @aspect est ajoutée.
@Before("execution(* rent(..))") signifie que le type @Before est une amélioration pré-améliorée et que son contenu est une expression ponctuelle @aspectj. Ici, cela signifie que l'amélioration est tissée sur la méthode Rent () de la classe cible. Rent () peut contenir tous les paramètres entrants et toute valeur de retour.
N'est-il pas très pratique pour un cours avec @Aspect d'intégrer le point tangent, le type d'amélioration et la logique de coupe croisée améliorée par annotation et code? O (∩_∩) o haha ~
Tests unitaires:
AspectJProxyFactory Factory = nouvel aspectjproxyfactory (); // définir la classe cible factory.setTarget (nouvel utilisateur ()); // ajouter la classe FACET Factory.Addaspect (prérentaspect.class); user proxy = factory.getproxy (); proxy.back);
Résultat de sortie:
- rejeter l'action de location-
Utilisateur: Location [Banque d'alimentation]
Utilisateur: retour [Banque d'alimentation]
3 Méthode de configuration
<! - Target Class -> <bean id = "user" /> <! - Face Class -> <ean /> <! - Créer automatiquement l'agent -> <Bean />
Tests unitaires:
ApplicationContext context = new ClassPathXmlApplicationContext (Spring.xml "); utilisateur user = (user) context.getBean (" user "); string userid =" 001 "; user.rent (userid); user.back (userId);La sortie est exactement la même que le programme.
Il peut également être configuré en fonction de l'espace de noms AOP du schéma:
<? 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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd "> <! - Aspectj Drive -> <aop: Aspectj-autoproxy /> <! - Target Class -> <e Bean Id =" user "/> <! <Bean /> </ Beans>
Cette configuration est plus simple. En fait, le mode proxy automatique a été adopté dans <aop:aspectj-atuoproxy/> o (∩_∩) o haha ~
proxy-target-class de <aop:aspectj-atuoproxy/> est faux par défaut, indiquant que l'amélioration est tissée à l'aide de la technologie de proxy dynamique JDK; Si cette valeur est vraie, elle indique que l'amélioration est tissée à l'aide de la technologie proxy dynamique CGLIB. Si la classe cible ne déclare pas l'interface, même si proxy-target-class est définie sur False, le yo (∩__) amélioré o haha ~
Pour les projets basés sur Java 5.0+, il est recommandé d'utiliser AspectJ pour configurer la coupe et l'amélioration, car cela est plus simple et plus direct.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.