Spring (D)

SpringAOP

       AOP représente la programmation orientée, qui est un complément de programmation orientée objet (OOP) est

       Dans la programmation classique qui est nécessaire pour faire fonctionner les enregistrements du journal des transactions, peut être réalisé la réutilisation du code POO par héritage, etc.

       AOP utilise un mécanisme d'extraction latérale, le code sera répétée en différents endroits de la dispersion est extrait, puis compiler ou de l'exécution, puis le code d'application extrait pour être effectuée lorsque cela est nécessaire.

       AOP terminologie:

       Aspect (section): Dans les applications pratiques, généralement, il se réfère section au fonctionnement du système d'emballage du type à insertion latérale

       Joinpoint (points de connexion): un point d'étape lors de l'exécution du programme, il est en fait une cible de l'opération, comme les appels et exceptions méthodes jetés

       Pointcut (point d'entrée): se réfère à l'intersection avec la section du flux de programme, le nom du point d'entrée se réfère à la classe ou méthode

       L'avis (notification / amélioration): Procédé d'amélioration de la trame de AOP effectuée par un point d'entrée particulier, à savoir, les espaces définis point d'entrée de code de programme à exécuter.

       TargetObject (Tout public cible): fait référence à tous les objets à notifier, aussi appelé une cible améliorée

       Proxy (Proxy): après la notification de l'objet cible, l'objet est créé dynamiquement

       Tissage (tissage): Le code de section dans l'objet cible, générant de ce fait un objet proxy du processus

       proxy dynamique JDK:

              proxy dynamique JDK est garantie par la classe java.lang.reflect.Proxy, vous pouvez appeler la méthode newProxyInstance classe Proxy () pour créer un objet proxy

              étapes de mise en œuvre:

              Ecrire Interface

             

              Ecrire une classe de mise en œuvre

             

              classe Cut pour écrire

              // section de classe 

public class {MyAspect

       // Cette méthode est appelée amélioration

       method1 public void () {

              System.out.println ( "compte courant est correct.");

       }

 

       method2 public void () {

              System.out.println ( "par la vérification ...");

       }

      

      

      

 

}

              Écrite classe proxy

              public class {jdkProxy outils InvocationHandler

 

       // Declare interface cible

       privé UserDao userDao;

      

       // Créer une méthode proxy

       Objet createProxy (UserDao userDao) public {

              this.userDao = userDao;

             

              // 1, chargeur de classe

              ClassLoader classLoader = jdkProxy.class.getClassLoader ();

              // 2, l'objet proxy est mis en œuvre toutes les interfaces

              Classe [] = claqq userDao.getClass () Les getInterfaces ().

              // 3, en utilisant une classe proxy, objet amélioré après le retour de la chose proxy

              retour Proxy.newProxyInstance (classLoader, claqq, this);

             

             

       }

      

       / *

        *

        * Toutes les méthode de classe proxy dynamique est appelée, sera remis à Invoke () le traitement de la méthode

        * Proxy est un objet qui représente l'agence

        * Méthode Méthode doit être exécuté (par traitement de réflexion)

        * La méthode d'exécution de Args est nécessaire

        *

        *

        * /

       @Passer outre

       invocation publique de l'objet (proxy de l'objet, méthode Méthode, Object [] args)

                     jette Throwable {

              // TODO stub méthode généré automatiquement

              // Statement

              MyAspect myAspect = new MyAspect ();

              // il y améliorer

              myAspect.method1 ();

              // appeler la méthode sur la classe cible, et passer des paramètres

              Objet obj = method.invoke (userDao, args);

              // Après des améliorations

              myAspect.method2 ();

              retourner obj;

       }

 

}

              cours de test d'écriture

              @Tester

       Procédé public void () {

              // Création d'un objet proxy

              jdkProxy jdkProxy = new jdkProxy ();

              // Création de l'objet cible

              UserDao userDao = new UserDaoImpl ();

              // Obtenez l'objet cible de l'objet proxy amélioré

              UserDao userDao1 = (UserDao) jdkProxy.createProxy (userDao);

              // méthode d'exécution

             

              userDao.addUser ();

              userDao.deleteUser ();

             

             

              System.out.println ( "=========================================== === ");

             

             

              userDao1.addUser ();

              userDao1.deleteUser ();

       }

 

              Jdk mode proxy dynamique sera converti en springAop

              Effacez la classe proxy a été reprise au printemps

              Changer la MyAspect classe d'aspect

              // section de classe 

public class {MyAspect outils MethodInterceptor

       // Cette méthode est appelée amélioration

       method1 public void () {

              System.out.println ( "compte courant est correct.");

       }

 

       method2 public void () {

              System.out.println ( "par la vérification ...");

       }

      

      

       // A cette méthode proxy ici

       @Passer outre

       Invoke public Object (MethodInvocation mi) throws Throwable {

              // TODO stub méthode généré automatiquement

              method1 ();

              // exécuter la méthode cible

              Objet obj = mi.proceed ();

              method2 ();

             

              retourner obj;

       }

 

}

              fichier de configuration écriture

              <! - 1, la classe cible ->

       <Bean id = classe "userDao" = "com.bdqn.cn.dao.UserDaoImpl" />

      

       <! - 2, section définitions de classe ->

       <Bean id = classe "myAspect" = "com.bdqn.cn.aspect.MyAspect" />

      

       <! - 3, en utilisant l'usine de proxy Spring pour définir un nom pour l'objet proxy userDaoProxy ->

       <Bean id = classe "userDaoProxy" = "org.springframework.aop.framework.ProxyFactoryBean">

             

              <! - Indique le proxy d 'exécution de l' interface ->

              <Property name = valeur "de proxyInterfaces" = "com.bdqn.cn.dao.UserDao" />

              <! - publics cibles ->

              <Property name = "target" ref = "userDao" />

              <! - Indique la section des notifications entourant l'implant ->

              <Property name = valeur "de interceptorNames" = "myAspect" />

              <! - Indique le mode proxy, si la valeur par défaut proxy dynamique jdk est vrai indication cglib ->

              <Property name = value "proxyTargetClass" = "false" />

                    

       </ Bean>

              cours de test d'écriture

              @Tester

       method2 public void () {

             

              ApplicationContext app = new ClassPathXmlApplicationContext ( "applicationContext.xml");

              UserDao ud = (UserDao) app.getBean ( "userDaoProxy");

              ud.addUser ();

              ud.deleteUser ();

             

       }

 

 

Publié 40 articles originaux · louange 7 won · vues 10000 +

Je suppose que tu aimes

Origine blog.csdn.net/sj_1993/article/details/105249918
conseillé
Classement