Este artículo profundiza la comprensión del proxy dinámico y la programación de AOP a través de un pequeño marco para el embalaje y la configuración de las funciones de AOP implementadas por el proxy dinámico.
Cree un objeto de la clase correspondiente basado en el valor (nombre completo de clase) correspondiente a la clave xxx del archivo de configuración.
Si y solo si el valor correspondiente a xxx es com.iot.proxy.aopframework.ProxyFactoryBean , se genera el objeto de clase proxy dinámico correspondiente. La clase de destino y la clase de implementación de notificación del objeto proxy están configurados por xxx.target y xxx.advice respectivamente.
config.propertiest se encuentra en el paquete AOPFramework
#xxx = java.util.arraylist
xxx = com.iot.proxy.aopframework.proxyfactorybean
xxx.advice = com.iot.proxy.myadvice
xxx.target = java.util.arraylist
Paquete: com.iot.proxy.aopframework , con las siguientes clases/interfaces:
paquete com.iot.proxy.aopframework; import java.lang.reflect.method;/*** creado por Brian el 2016/2/2. */consejo de interfaz pública {void beforemethod (método método); Vacío AfterMethod (método método);} paquete com.iot.proxy.aopframework; import java.lang.reflect.method;/*** creado por Brian el 2016/2/2. */public class MyAdVice implementa el consejo {long BegInTime = 0; @Override public void beforemethod (método método) {system.out.println (método.getName ()+"antes en"+begInTime); begIntime = system.currentTimemillis ();}@anular public sinqueo después deMethod (método de método) {larga fin de tiempo = tiempo de fin de final = System.CurrentTimemillis (); System.out.println (método.getName ()+ "costo total"+ (endtime-beGintime));}} paquete com.iot.proxy.aopframework; import java.io.ioexception; import java.io.inputstream; import java.util.properties;/*** creado por Brian el 2016/2/2. */public class BeanFactory {Properties Properties = new Properties (); public BeanFactory (inputStream InputStream) {try {Properties.Load (inputStream);} Catch (IOException e) {E.PrintStackTRace ();}} Public Object getBean (String Name) {String className = Properties.getPererty (name); Object; Class.forname (classname); bean = clazz.newinstance ();} catch (classNotFoundException e) {E.PrintStackTrace ();} Catch (InstantantiationException e) {E.PrintStackTrace ();} Catch (ilegalAccessException e) {E.PrintStackTrace ();} if (instancia (instancia (instancia (instancia ( ProxyFactoryBean) {proxyFactoryBean proxyFactoryBean = (proxyFactory) bean; consejo consejo = null; object Target = null; try {consejo = (consejo) class.forname (Properties.getProperty (name+". ACONISIÓN")). NewInstance (); Target = = Target = Class.forname (Properties.getProperty (name+". Target")). NewInStance ();} Catch (InstanciationException e) {E.PrintStackTrace ();} Catch (ilegalAccessException e) {E.PrintStackTrace ();} Catch (classnotFoundException E) {E.PrintStackTrace ();} proxyFactoryBean.SetAdVice (consejo); proxyFactoryBean.setTarget (target); objeto proxy = ((proxyFactoryBean) bean) .getProxy (); return proxy;} return bean;}} paquete com.iot.proxy.aopframework; import java.lang.reflect.invocationHandler; import java.lang.reflect.method; import java.lang.reflect.proxy;/*** creado por Brian en 2016/2/3. */public class proxyFactoryBean {private Object Target; Private Advice Asesor; Public Object getProxy () {object proxy = proxy.newproxyInstance (target.getClass (). getClassLoader (), target.getClass (). getinterfaces (), nuevo invocationHandler () {@Override Public Object Invoke (Object Proxy, Método, Método, Objeto, Objeto) {consejo.beforEmethod (método); objeto retval = método.invoke (target, args); consejo.afteremethod (método); return retval;}}); return proxy;} objeto público getTarget () {return Target;} public void setTarget (objetivo de objeto) {this.target = Target;} getAdVice () setAdVice (consejo consejo) {this.Advice = consejo;}} paquete com.iot.proxy.aopframework; import java.io.inputstream; import java.util.collection;/*** creado por Brian el 2016/2/3. */public class aOpFrameWorkTest {public static void main (string [] args) {inputStream inputStream = aOpFrameWorkTest.class.getResourceasstream ("config.properties"); object Bean = newfactory (inputStream) .getBean ("xxx"); system.ut.println (bean.getClass (). frijoles) .clar ();}}La salida es:
com.sun.proxy. $ proxy0
claro antes a las 0
Costo claro Total 0
La salida es:
java.util.arraylist
Se puede ver que cambiar el archivo de configuración puede cambiar los resultados en ejecución del código, logrando así resultados flexibles.
Lo anterior es todo el contenido de este artículo sobre el código de instancia de marco pequeño para el empaque y la configuración de las funciones AOP de Java. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!