Эта статья углубляет понимание динамического прокси и программирования AOP через небольшую структуру для упаковки и конфигурации функций AOP, реализованных Dynamic Proxy.
Создайте объект соответствующего класса на основе значения (полное имя класса), соответствующее ключу xxx файла конфигурации.
Если и только если значение, соответствующее xxx, является com.iot.proxy.aopframework.ProxyFactoryBean , генерируется соответствующий объект класса динамического прокси. Целевой класс и класс реализации уведомлений объекта прокси настраивается xxx.target и xxx.advice соответственно.
config.propertiest находится в пакете Aopframework
#xxx = java.util.arraylist
xxx = com.iot.proxy.aopframework.proxyfactorybean
xxx.advice = com.iot.proxy.myadvice
xxx.target = java.util.arraylist
Пакет: com.iot.proxy.aopframework , со следующими классами/интерфейсами:
пакет com.iot.proxy.aopframework; import java.lang.reflect.method;/*** Создан Брайаном 2016/2/2. */public interface Advice {void beforemethod (метод метода); void effemethod (метод метода);} пакет com.iot.proxy.aopframework; import java.lang.reflect.method;/*** Создан Брайаном 2016/2/2. */public class myAdvice реализует советы {long begintime = 0; @Override public void beforemethod (метод метода) {System.out.println (method.getName ()+"до"+begintime); betrintime = system.currenttimemilis ();}@overme public weplymothod (метод метода) System.currentTimeMillis (); System.out.println (method.getName ()+ "stost"+ (endtime-begintime));}} пакет com.iot.proxy.aopframework; import java.io.ioexception; импорт java.io.inputstream; import java.util.properties;/*** Создан Брайаном 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. clazz = class.forname (classname); bean = clazz.newinstance ();} catch (classnotfoundexception e) {e.printstacktrace ();} catch (instantiationException e) {e.printstacktrace ();} catch (allostalaccessexexex e) {e.printstacktrace (); ProxyFactoryBean) {ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean) Bean; Advice Advion = null; объект цели = null; try {Advice = (Advion) class.forname (Properties.getProperty (имя+". Совет"). Class.forname (Properties.getProperty (name+". {e.printstacktrace ();} proxyFactoryBean.setAdvice (Assement); ProxyFactoryBean.SetTarget (target); Object Proxy = ((ProxyFactoryBean) Bean) .getProxy (); return Proxy;} return Bean;}}. пакет com.iot.proxy.aopframework; import java.lang.reflect.invocationHandler; импорт java.lang.reflect.method; импорт java.lang.reflect.proxy;/*** Создан Брайаном 2016/2/3. */proxyfactorybean {Private Object Complety Commine; Public Object getProxy () {object proxy = proxy.newProxyInstance (target.getClass (). getClassLoader (), Target.getClass (). getInterfaces (), новый vockeHandler () {@@@@@@override public object obvident объект. {Asse.beforeMethod (method); object retval = method.invoke (target, args); usd.afteremethod (method); return retval;}}); return proxy;} public Object getTarget () {return Target;} public void settarget (объект цели) {this.Target = target;} public советы getAdvice () {reaturvice () {vitioDempice () {vition veurvice () {vition veurvice () {vition veurvice () {vition () {vition veurvice (). setAdvice (советы по совету) {this.advice = usd;}} пакет com.iot.proxy.aopframework; import java.io.inputstream; импорт java.util.collection;/*** Создан Брайаном 2016/2/3. */public class AopFrameWorkTest {public static void main (string [] args) {inputStream inputStream = aopFrameWorkTest.class.getResourceasStream ("config.properties"); Object Bean = новый BeanFactory (inputStream) .getBean ("xxx"); System.out.println (bean.getClass (). GetName ()); ((collection) bean) .clear ();}}Вывод:
com.sun.proxy. $ proxy0
ясно перед 0
чистая стоимость общая 0
Вывод:
java.util.arraylist
Можно видеть, что изменение файла конфигурации может изменить результаты запуска кода, тем самым достигнув гибких результатов.
Выше приведено все содержание этой статьи о коде малого фреймворта для упаковки и конфигурации функций Java AOP. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!