บทความนี้ลึกซึ้งยิ่งขึ้นความเข้าใจในการเขียนโปรแกรมพร็อกซีแบบไดนามิกและ 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 พร้อมคลาส/อินเตอร์เฟสต่อไปนี้:
แพ็คเกจ com.iot.proxy.aopframework; นำเข้า java.lang.reflect.method;/*** สร้างโดย Brian เมื่อปี 2016/2/2 */คำแนะนำอินเตอร์เฟสสาธารณะ {เป็นโมฆะ beforemethod (วิธีการ); โมฆะ AfterMethod (วิธีการ);} แพ็คเกจ com.iot.proxy.aopframework; นำเข้า java.lang.reflect.method;/*** สร้างโดย Brian เมื่อปี 2016/2/2 */คลาสสาธารณะ MyAdvice ใช้คำแนะนำ {Long Begintime = 0; @Override โมฆะสาธารณะ beforemethod (วิธีการ) {system.out.println (method.getName ()+"ก่อนที่"+begintime); begintime = system.currentTimeMillis (); System.currentTimeMillis (); System.out.println (method.getName ()+ "ค่าใช้จ่ายทั้งหมด"+ (endtime-begintime));}} แพ็คเกจ com.iot.proxy.aopframework; นำเข้า java.io.ioexception; นำเข้า java.io.inputstream; นำเข้า java.util.properties;/*** สร้างโดย Brian เมื่อปี 2016/2/2 */คลาสสาธารณะ beanfactory {คุณสมบัติคุณสมบัติ = คุณสมบัติใหม่ (); public beanfactory (inputstream inputstream) {ลอง {properties.load (inputstream);} catch (ioexception e) {e.printstacktrace ();}} วัตถุสาธารณะ {class clazz = class.forname (classname); bean = clazz.newinstance ();} catch (classnotfoundexception e) {e.printstacktrace ();} catch (instantiationexception e) {e.printstacktrace (); ProxyFactoryBean) {proxyfactoryBean proxyfactoryBean = (proxyfactorybean) ถั่ว; คำแนะนำคำแนะนำ = null; เป้าหมายวัตถุ = null; ลอง {คำแนะนำ = (คำแนะนำ) คลาส forName (properties.getProperty (ชื่อ+". คำแนะนำ") class.forName (properties.getProperty (ชื่อ+". target")). newInstance ();} catch (InstantiationException e) {E.printStackTrace ();} catch (ungleclaccessexception e) {e.printstacktrace ();} catch (classnotfoundexception e) {E.PrintStackTrace ();} ProxyFactoryBean.setAdvice (คำแนะนำ); ProxyFactoryBean.SettArget (เป้าหมาย); Object Proxy = ((ProxyFactoryBean) ถั่ว) .getProxy (); คืนค่าพร็อกซี; แพ็คเกจ com.iot.proxy.aopframework; นำเข้า java.lang.reflect.invocationhandler; นำเข้า java.lang.reflect.method นำเข้า java.lang.reflect.proxy;/*** สร้างโดย Brian เมื่อปี 2016/2/3 */คลาสสาธารณะ ProxyFactoryBean {เป้าหมายวัตถุส่วนตัวคำแนะนำส่วนตัวคำแนะนำส่วนตัววัตถุสาธารณะ getProxy () {Object Proxy = Proxy.newProxyInstance (target.getClass (). getClassLoader (), getClass () {คำแนะนำ. beforemethod (วิธีการ); วัตถุ retval = method.invoke (เป้าหมาย, args); justion.afteremethod (วิธีการ); return retval;}}); คืนพร็อกซี;} วัตถุสาธารณะ gettarget ()}}}}}} คำแนะนำที่เป็นคำแนะนำ คำแนะนำ) {this.advice = คำแนะนำ;}} แพ็คเกจ com.iot.proxy.aopframework; นำเข้า java.io.inputstream; นำเข้า java.util.collection;/*** สร้างโดย Brian เมื่อปี 2016/2/3 */คลาสสาธารณะ AOPFRAMEWORKTEST {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {inputStream inputStream = aopframeworktest.class.getResourceasstream ("config.properties"); object bean = ใหม่ beanfactory (inputstream) .getBean ("xxx"); system.out.println (bean.getclass (). getName ()); (คอลเลกชัน) ถั่ว) .clear ();}}ผลลัพธ์คือ:
com.sun.proxy. $ proxy0
ล้างก่อนเวลา 0
ค่าใช้จ่ายที่ชัดเจนทั้งหมด 0
ผลลัพธ์คือ:
java.util.arraylist
จะเห็นได้ว่าการเปลี่ยนไฟล์การกำหนดค่าสามารถเปลี่ยนผลลัพธ์การรันของรหัสซึ่งจะได้ผลลัพธ์ที่ยืดหยุ่น
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับรหัสอินสแตนซ์ Framework ขนาดเล็กสำหรับบรรจุภัณฑ์และการกำหนดค่าของฟังก์ชั่น AOP ของ Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!