Cet article approfondit la compréhension de la programmation Dynamic Proxy et AOP via un petit cadre pour l'emballage et la configuration des fonctions AOP implémentées par proxy dynamique.
Créez un objet de la classe correspondante basée sur la valeur (nom complet de classe) correspondant à la clé xxx du fichier de configuration.
Si et seulement si la valeur correspondant à xxx est com.iot.proxy.aopframework.ProxyFactoryBean , l'objet de classe proxy dynamique correspondant est généré. La classe cible et la classe d'implémentation de notification de l'objet proxy sont configurées par xxx.target et xxx.advice respectivement.
config.propertiest se trouve dans le package AOPFramework
# xxx = java.util.arraylist
xxx = com.iot.proxy.aopframework.proxyfactorybean
xxx.advice = com.iot.proxy.myadvice
xxx.target = java.util.arraylist
Package: com.iot.proxy.aopframework , avec les classes / interfaces suivantes:
package com.iot.proxy.aopframework; import java.lang.reflect.method; / ** * créé par Brian le 2016/2/2. * / Conseils d'interface publique {void beforeMethod (méthode méthode); Aftermethod void (méthode de la méthode);} package com.iot.proxy.aopframework; import java.lang.reflect.method; / ** * créé par Brian le 2016/2/2. * / public class MyAdvice implémente les conseils {long begintime = 0; @Override public void beforeMethod (méthode méthode) {System.out.println (méthode.getName () + "avant" + Begintime); begintime = System.currentTimemillis ();} @ @ override public Void Afterrethod (méthode méthode) {Longtime = Fintime = System.CurrentTimemillis (); System.out.println (Method.GetName () + "Cost Total" + (Endtime-Begintime));}} package com.iot.proxy.aopframework; import java.io.ioexception; import java.io.inputStream; import java.util.properties; / ** * créé par Brian le 2016/2/2. * / public class beanfactory {Properties Properties = new Properties (); public beanfactory (inputStream inputStream) {try {Properties.load (inputStream);} Catch (ioException e) {e.printStackTrace ();}} public objet GetBean (Nom de String) {String classname = properties.getProperty (name); Cllazz = class.forname (className); bean = Clazz.newInstance ();} catch (classNotFoundException e) {e.printStackTrace ();} catch (InstantiationException e) {e.printStStackTrace ();} Catch (illégalAccessException e) {E.PrintStackTrace ();} if (beean instance ProxyfactoryBean) {proxyfactoryBean proxyfactoryBean = (proxyfactoryBean) bean; conseil conseils = null; objet cible = null; try {conseils = (conseils) class.forname (propriétés.getProperty (name + ". Conseils")). Class.forname (Properties.getProperty (name + ". Target")). NewInstance ();} Catch (InstantiationException e) {e.printStackTrace ();} Catch (illégalaccessException e) {e.printStackTrace ();} Catch (classNoTfoundException e) gens package com.iot.proxy.aopframework; import java.lang.reflect.invocationhandler; import java.lang.reflect.method; import java.lang.reflect.proxy; / ** * créé par Brian sur 2016/2/3. * / classe publique ProxyFactoryBean {cible d'objet privé; Conseil privé conseils; objet public getProxy () {objet proxy = proxy.newproxyinstance (target.getClass (). getClassoller (), target.getClass (). getInterfaces (), new invocationhandler () {@OVERRID Throwable {conseils.beForeMethod (méthode); objet retval = méthode.invoke (cible, args); conseils.afteremethod (méthode); return retval;}}); return proxy;} objet public objet getTarget () {return cible;} public void Settarget (objet Target) {this.target = cible;} public conseils public GetAdvice () {return conseil setAdvice (conseils de conseil) {this.advice = conseil;}} package com.iot.proxy.aopframework; import java.io.inputStream; import java.util.collection; / ** * créé par Brian le 2016/2/3. * / public class aopframeworktest {public static void main (string [] args) {inputStream inputStream = aopframeworktest.class.getResourceSstream ("config.properties"); objet bean = new Beanfactory (inputStream) .getBean ("xxx"); System.out.println (bean.getClass (). bean) .clear ();}}La sortie est:
com.sun.proxy. $ proxy0
Effacer avant à 0
Coût clair total 0
La sortie est:
java.util.arraylist
On peut voir que la modification du fichier de configuration peut modifier les résultats en cours d'exécution du code, obtenant ainsi des résultats flexibles.
Ce qui précède est l'intégralité du contenu de cet article sur le petit code d'instance Framework pour l'emballage et la configuration des fonctions AOP de Java. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!