تعمق هذه المقالة فهم البرمجة الديناميكية والبرمجة AOP من خلال إطار صغير لتعبئة وتكوين وظائف AOP التي تنفذها الوكيل الديناميكي.
قم بإنشاء كائن من الفئة المقابلة بناءً على القيمة (الاسم الكامل للفئة) المقابلة للمفتاح 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 ، مع الفئات/الواجهات التالية:
package com.iot.proxy.aopframework ؛ استيراد java.lang.reflect.method ؛/*** تم إنشاؤه بواسطة براين في 2016/2/2. */نصيحة الواجهة العامة {void beforemethod (طريقة الطريقة) ؛ void بعد method (طريقة الطريقة) ؛} package com.iot.proxy.aopframework ؛ استيراد java.lang.reflect.method ؛/*** تم إنشاؤه بواسطة براين في 2016/2/2. */الفئة العامة myAdvice تنفذ النصيحة {long begintime = 0 ؛ override public void beforemethod (method method) {system.out.println (method.getName ()+"قبل"+begintime) ؛ begintime = system.currentTimeMillis () ؛ System.CurrentTimeMillis () ؛ system.out.println (method.getName ()+ "تكلفة إجمالي"+ (Endtime-begintime)) ؛}} package com.iot.proxy.aopframework ؛ import java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.util.properties ؛/*** تم إنشاؤه بواسطة Brian في 2016/2/2. */public class beanfactory {properties properties = new properties () ؛ public beanfactory (inputStream inputStream) {try {properties.load (inputStream) ؛} catch (iOexception e) {E.PrintStackTrace () ؛ clazz = class.forname (className) ؛ bean = clazz.newinstance () ؛} catch (classnotfoundException e) { proxyfactorybean) {proxyfactorybean proxyfactorybean = (proxyfactorybean) bean ؛ نصيحة نصيحة = null ؛ الهدف الكائن = null ؛ جرب {نصيحة = (نصيحة) class.forname (properties.getProperty (name+". class.forname (properties.getProperty (name+". target")). newinstance () ؛} catch (instantiationException e) { {E.PrintStackTrace () ؛} proxyfactorybean.setAdvice (نصيحة) ؛ proxyfactorybean.settarget (target) ؛ proxy object = ((proxyfactorybean) bean) .getproxy () ؛ package com.iot.proxy.aopframework ؛ import java.lang.reflect.invocationHandler ؛ import java.lang.reflect.method ؛ import java.lang.reflect.proxy ؛/*** biRian في 2016/2/3. */public class proxyfactorybean {private object target ؛ نصائح نصيحة خاصة ؛ كائن عام getProxy () {كائن proxy = proxy.newproxyinstance (target.getClass (). {excloy.beforemethod (method) ؛ object retval = method.invoke (target ، args) ؛ exper.afteremethod (method) ؛ return retval ؛}}) ؛ return proxy ؛} الكائن العام getTarget () {إرجاع الهدف ؛} setAdvice (نصيحة نصيحة) {this.advice = express ؛}} package com.iot.proxy.aopframework ؛ import java.io.inputstream ؛ استيراد java.util.collection ؛/*** تم إنشاؤه بواسطة براين في 2016/2/3. */الفئة العامة AopframeworkTest {public static void main (string [] args) {inputStream inputStream = aopframeworktest.class.getResourCeasStream ("config.properties") ؛ كائن بين = جديد beanfactory (inputStream) .getBean ("xxx") ؛ system.out.println (bean.getclass ().الإخراج هو:
com.sun.proxy. $ proxy0
واضح من قبل في 0
إجمالي تكلفة واضح 0
الإخراج هو:
java.util.arraylist
يمكن ملاحظة أن تغيير ملف التكوين يمكن أن يغير نتائج تشغيل الكود ، وبالتالي تحقيق نتائج مرنة.
ما سبق هو المحتوى الكامل لهذه المقالة حول رمز مثيل الإطار الصغير لتعبئة وتكوين وظائف AOP الخاصة بـ Java. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!